shell編程中有一些特殊的變量可使用。這些變量在腳本中能夠做爲全局變量來使用。html
名稱 | 說明 |
---|---|
$0 | 執行腳本的名稱 |
$1-9 | 腳本執行時的參數1到參數9 |
$? | 腳本的返回值,表明上一個命令是否執行成功,若是成功,則爲0,不然不成功 |
$! | 表明最後執行的後臺命令的PID |
$# | 腳本執行時,輸入的參數的個數 |
$@ | 輸入的參數的具體內容(將輸入的參數做爲一個多個對象,便是全部參數的一個列表) |
$* | 輸入的參數的具體內容(將輸入的參數做爲一個單詞) |
源代碼: echo "腳本的名字是:"$0 n=1 echo "使用\$@的參數列表爲:"$@ for temstr in "$@" do echo "第$n個參數是:" $temstr let n+=1 done n=1 echo "使用\$*的參數列表爲:"$* for temstr in "$*" do echo "第$n個參數是:" $temstr let n+=1 done
執行結果:shell
$ ./test.sh 1 2 3 4 腳本的名字是:./test.sh 使用$@的參數列表爲:1 2 3 4 第1個參數是: 1 第2個參數是: 2 第3個參數是: 3 第4個參數是: 4 使用$*的參數列表爲:1 2 3 4 第1個參數是: 1 2 3 4
在上面的例子中,使用$@
與$*
是,都是用雙引號引發來,但當$*
不使用雙引號時,結果與$@
的結果相同。編程
緣由分析:當都使用雙引號時,咱們能夠看到參數列表輸出都是同樣的,說明確實兩個變量均可以存儲全部的參數內容,也就顯示出來兩個變量之間的對參數處理的不一樣,即一個將其做爲列表處理,一個講全部參數做爲一個單詞處理。當$*不適用雙引號時,執行到for語句時,會首先將$*的值(1 2 3 4 )取出來,而後循環語句就變成了 for tem in 1 2 3 4 ,最後的輸出結果也就變成了列表的循環輸出。spa
$@
與$*
的區別:$@
與$*
均可以使用一個變量來來表示全部的參數內容,但這兩個變量之間有一些不一樣之處。$@
:將輸入的參數做爲一個列表對象$*
:將輸入的參數做爲一個單詞能夠說是所見即所得:即將單引號內的內容原樣輸出,或者描述爲單引號裏面看見的是什麼就會輸出什麼。.net
命令或變量
或$(命令或變量)。狀態碼 | 意義 |
---|---|
0 | 命令成功結束 |
1 | 通用未知錯誤 |
2 | 誤用shell命令 |
126 | 命令不可執行 |
127 | 沒找到命令 |
128 | 無效退出參數 |
128+x | Linux 信號x的嚴重錯誤 |
130 | Linux 信號2 的嚴重錯誤,即命令經過SIGINT(Ctrl+C)終止 |
255 | 退出狀態碼越界 |
默認狀態下,shell腳本會以腳本中的最後一個命令做爲退出狀態碼。因此通常狀況下,在shell腳本中以 exit 命令的值來指定shell命令的退出狀態碼。可是退出狀態碼的範圍是 0 ~ 255, 退出值超出這個範圍將會執行取模運算。例如經過exit 命令指定返回值爲300,通過取模運算,那麼退出狀態碼就爲44code