在所有程式設計語言中,變數都扮演著核心角色。Linux Shell Script 也不例外,它主要使用兩種類型的變數:系統定義變數與使用者定義變數。Shell 腳本中的變數本質上是對數值或字元值的引用,且不像正式程式語言那樣要求宣告資料類型,這使得腳本撰寫更靈活。
這些變數由作業系統(Linux)建立並維護,通常以全大寫命名。您可以透過 set 指令查看所有系統變數。常見範例如下:
| 變數名稱 | 含義 |
|---|---|
| BASH=/bin/bash | Shell 名稱 |
| BASH_VERSION=4.1.2(1) | Bash 版本 |
| COLUMNS=80 | 螢幕欄數 |
| HOME=/home/linuxtechi | 使用者家目錄 |
| LINES=25 | 螢幕列數 |
| LOGNAME=LinuxTechi | 登入名稱 |
| OSTYPE=Linux | 作業系統類型 |
| PATH=/usr/bin:/sbin:/bin:/usr/sbin | 路徑設定 |
| PS1=[\u@\h \W]\$ | 提示符設定 |
| PWD=/home/linuxtechi | 目前工作目錄 |
| SHELL=/bin/bash | Shell 名稱 |
| USERNAME=linuxtechi | 目前登入使用者 |
要列印這些變數值,使用 echo 指令並加上 $ 前綴:
# echo $HOME # echo $USERNAME
在腳本中引用環境變數同樣需加上 $。例如:
$ cat myscript #!/bin/bash # 從系統顯示使用者資訊 echo "User info for userid: $USER" echo UID: $UID echo HOME: $HOME
執行時,變數會被替換為當前值。注意:在雙引號中引用變數(如 $USER)仍會被正確解析。但這帶來一個陷阱:
$ echo "The cost of the item is $15" The cost of the item is 5
Shell 將 $1 視為變數(未定義),故只輸出 5。若要輸出字面美元符號,必須用反斜線轉義:
$ echo "The cost of the item is \$15" The cost of the item is $15
使用者可在腳本中自訂變數,暫存資料並在腳本生命週期內使用,使腳本更像真正的程式。命名規則:最多 20 個字元(字母、數字、底線),區分大小寫(Var1 ≠ var1)。
賦值使用等號,等號兩邊不可有空格:
var1=10 var2=-57 var3=testing var4="still more testing"
Shell 會自動判斷資料型態。變數值在腳本執行期間保持,腳本結束後銷毀。引用時加 $,賦值時不加:
$ cat test3 #!/bin/bash days=10 guest="Katie" echo "$guest checked in $days days ago" days=5 guest="Jessica" echo "$guest checked in $days days ago"
輸出:
Katie checked in 10 days ago Jessica checked in 5 days ago
將一個變數值賦給另一個變數時,右側必須加 $:
value1=10 value2=$value1 # 正確 # value2=value1 # 錯誤,會被視為字串 "value1"
`)與命令替換反引號可將指令輸出賦值給變數,是腳本程式設計的基石:
testing=`date`
範例:
$ cat test5 #!/bin/bash testing=`date` echo "The date and time are: " $testing
輸出:
The date and time are: Mon Jan 31 20:23:25 EDT 2011
注意:Bash 也支援 $(...) 語法替代反引號,優點是可巢狀使用:
$ echo "Today's date & time is: " $(date) Today's date & time is: Sun Jul 27 16:26:56 IST 2014