在 Shell Script 中,所有的變數都視為字串,因此並不需要在定義變數前先定義變數類型。在定義變數時,不必加 $,但是在使用它時,必須加上 $。請注意,在定義變數時,等號的二邊不可以有空白,否則將出現錯誤 ,系統會誤以為你要執行一個指令。

在 Shell Script 中,雙引號 "" 內容中的特殊字元不會被忽略,而單引號 '' 中的所有特殊字元將被忽略。另外,\ 之後的一個字元將被視為普通字串。

$ color=blue
$ echo $color
blue
$ echo "$color"
blue
$ echo "$color"
blue
$ echo '$color'
$color
$ echo \$color
$color

$ light=dark
$ echo ${light}blue
darkblue
$ echo "$light"blue
darkblue

自動變數

變數名稱 說明
$? 表示上一個指令的離開狀況,一般指令正常離開會傳回 0。不正常離開則會傳回 1、2 等數值。
$$ 這一個 shell 的 process ID number
$! 最後一個在背景執行的程式的 process number
$- 這個參數包含了傳遞給 shell 旗標 (flag)。
$1 代表第一個參數,$2 則為第二個參數,依此類推。而 $0 為這個 shell script 的檔名。
$# 執行時,給這個 Shell Script 參數的個數
$* 包含所有輸入的參數,$@ 即代表 $1, $2,....直到所有參數結束。$* 將所有參數無間隔的連在一起,存成一個單一的參數。也就是說 $* 代表了 "$1 $2 $3..."。
$@ 包含所有輸入的參數,$@ 即代表 $1, $2,....直到所有參數結束。$@ 用將所有參數以空白為間隔,存在 $@ 中。也就是說 $@ 代表了 "$1" "$2" "$3"....。
$BASH_ENVabsolute path of startup file
$CDPATHdirectories searched by cd
$FCEDITabsolute path of history editor
$LINENOcurrent line number in shell script
$LINESterminal height
$PPIDprocess ID of parent
$RANDOMrandom integer
$SECONDSnumber of seconds since shell started
$SHELLabsolute pathname of preferred shell
$TMOUTseconds to log out after lack of use

空變數的處理

變數 說明
${var:-word} 如果變數 var 尚未設定或是 null,則將使用 word 這個值,但不改變 var 變數的內容。
${var:=word} 如果變數 var 尚未設定或是 null,則變數 var 的內容將等於 word 這個字串,並使用這個新的值。
${var:?word} 如果變數 var 已經設定了,而且不是 null,則將使用變數 var。否則則印出 word 這個字串,並強制離開程式。我們可以設定一個字串 "Parameter null or not set" 來在變數未設定時印出,並終止程式。
${var:+word} 如果變數 var 已經設定了,而且不是 null,則以 word 這個字串取代它,否則就不取代。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()