Shell脚本编程----变量的使用
接觸Linux Shell腳本編程很久了,但是發現每次學完之后就會忘記,這似乎又印證了那句"好記性不如爛筆頭"的言語,事實確實如此,堅持寫博客,定期回顧,你會感覺很充實。
這是本系列教程的第一篇----變量的使用,該系列文章不是我的原創制作,但它們是我從英文翻譯而來,行文中很夾雜著一些自己的理解和實踐。我喜歡看英文文檔,不過有時候看著看著就想睡覺,本系列教程不會回答諸如Shell是什么?有什么作用的問題,我們會直接敲代碼,直接了當~~接下來讓我們一起一步一步學習Shell編程吧!
在本章中,我們將學習如何在Unix中使用Shell變量。變量是我們為其分配值的字符串。分配的值可以是數字,文本,文件名,設備或任何其他類型的數據。一個變量只不過是指向實際數據的指針,或者說是一個容器,你可以在Shell中創建、分配和刪除變量。
原文網址:https://www.tutorialspoint.com/unix/unix-special-variables.htm
一、變量名
一個Sheel變量名只能由英文字母(A-Z/a-z)、數字(0-9)或下劃線_組成,并且不能由數字打頭,這和Java中變量的命名其實是一樣的~
按照慣例,Shell變量一般都是大寫字母,當然,這并不是必須的。
舉個例子,下面的變量名是合法的:
_ALI TOKEN_A VAR_1 VAR_2 復制代碼下面的變量是非法的:
2_VAR # 以數字打頭 -VARIABLE # -是非法字符 VAR1-VAR2 VAR_A! # !是特殊字符 復制代碼你之所以不能使用像!、*、?、-這些字符進行命名,因為這些變量在Shell中有特殊含義。
變量定義
Shell中采用下面的形式定義變量:
variable_name=variable_value 復制代碼左邊是變量的名字,右邊是變量值。舉個例子:
NAME="Zara Ali" 復制代碼上面定義了一個Name變量,它的值為Zara Ali,對于這種類型的變量,Shell中稱為標量變量,一個標量變量在某一時刻只能有一個值與之對應。
Shell使您能夠在變量中存儲任何想要的值。舉個例子:
VAR1="Zara Ali" VAR2=100 復制代碼二、使用變量
如果你想訪問變量的值,在Shell中你需要使用$前綴,舉個例子,下面的腳本將會訪問之前定義的Name變量并將它打印出來。
NAME="Zara Ali" echo $NAME 復制代碼上面的腳本將打印出Zara Ali.
筆者在自己的阿里云測試如下:
三、只讀變量
Shell允許你使用read-only命令將變量聲明為只讀方式,一旦將變量聲明為只讀模式,變量的值不能被改變。
舉個栗子,下面的腳本片段將拋出一個異常信息,因為我們試圖改變一個只讀變量的值:
NAME="Zara Ali" readonly NAME NAME="Qadiri" 復制代碼執行結果如下:
./FirstShell.sh: line 3: NAME: readonly variable
筆者親測如下圖:
四、取消變量賦值
取消變量賦值或刪除變量會指示shell從它跟蹤的變量列表中刪除變量。一旦你取消了某個變量的賦值,你就不能訪問到該變量的值了。
unset命令用于取消某個變量的賦值,其語法格式如下:
unset variable_name
舉個例子:
NAME="Zara Ali" unset NAME echo $NAME 復制代碼上面的腳本不會打印出任何東西,因為你不能輸出使用unset命令修飾的變量,此時變量已經沒有值了。你可能會問,那么被unset修飾過的變量還可以再次被賦值嗎?答案是肯定的。筆者將腳本修改如下:
NAME="Zara Ali" unset NAME NAME="S" echo $NAME 復制代碼上面的腳本將會輸出S
五、變量類型
Shell中主要存在三種變量類型,分別是:
-
1、局部變量
局部變量就是只存在與某個shell實例的變量,它不適用于由shell啟動的程序。 它們在命令提示符處設置。
-
2、環境變量
環境變量可用于shell的任何子進程。 某些程序需要環境變量才能正常工作。 通常,shell腳本只定義它運行的程序所需的那些環境變量。
-
3、Shell變量
一個shell變量是一個特殊的變量,它由shell設置并且為了正常工作而被shell需要。 其中一些變量是環境變量,而另一些則是局部變量。
六、特殊變量
在此節中我們將討論Unix中的特殊變量。舉個例子,$表示當前Shell所處的進程號PID:
echo $$
上面將輸出你當前的PID,如:
下面表格列出了你能在Shell腳本中使用的特殊變量:
| 1 | $0 當前腳本的文件名稱 |
| 2 | $n 這些變量對應于腳本被調用的參數,如$1表示調用該腳本時傳入參數中的第一個參數,$2表示第二個,以此類推 |
| 3 | $# 調用當前腳本傳入的參數個數 |
| 4 | $* 傳遞給腳本或函數的所有參數 |
| 5 | $@ 傳遞給腳本或函數的所有參數 |
| 6 | $? 上個命令的退出狀態,或函數的返回值 |
| 7 | $$ 當前Shell進程ID。對于 Shell 腳本,就是這些腳本所在的進程ID。 |
| 8 | $! 最后一個后臺命令的進程號PID |
七、命令行參數
命令行參數$1,$2,$3,...,$9是位置參數,$0指向實際的命令,程序,shell腳本或函數,$1,$2,$3,...,$9作為參數命令。下面的栗子展示了各種特殊變量的使用:
echo "File Name: $0" echo "First Parameter : $1" echo "Second Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#" 復制代碼采用下面的方式運行,結果如下:
$./FirstShell.sh Zara Ali File Name : ./FirstShell.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 復制代碼八、$*和$@的區別
$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號("")包含時,都以$1 $2 … $n的形式輸出所有參數。
但是當它們被雙引號("")包含時,$* 會將所有的參數作為一個整體,以$1 $2 … $n的形式輸出所有參數;$@ 會將各個參數分開,以$1 $2 … $n 的形式輸出所有參數
for TOKEN in "$*" doecho $TOKEN donefor token in "$@" doecho $token done 復制代碼上面腳本中*被雙引號包括,當采用下面方式調用時,兩者輸出的結果是不一樣的,如下:
九、退出狀態
$!表示上一條命令或者函數的執行狀態,如果返回0,則表示執行成功,1表示失敗
總結
以上是生活随笔為你收集整理的Shell脚本编程----变量的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群里别人问的杂七杂八的问题
- 下一篇: 总结:Oracle快速入门