我們可以在執(zhí)行 Shell 腳本時炫欺,向腳本傳遞參數(shù)乎完,腳本內獲取參數(shù)的格式為:$n。n 代表一個數(shù)字品洛,1 為執(zhí)行腳本的第一個參數(shù)树姨,2 為執(zhí)行腳本的第二個參數(shù),以此類推……
幾個特殊字符用來處理參數(shù):
參數(shù)處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數(shù)個數(shù) |
$* | 以一個單字符串顯示所有向腳本傳遞的參數(shù)桥状。如"1 n"的形式輸出所有參數(shù)。 |
$$ | 腳本運行的當前進程ID號 |
$! | 后臺運行的最后一個進程的ID號 |
$@ | 與@"用「"」括起來的情況士飒、以"2" … "$n" 的形式輸出所有參數(shù)查邢。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同酵幕。 |
$? | 顯示最后命令的退出狀態(tài)扰藕。0表示沒有錯誤,其他任何值表明有錯誤裙盾。 |
$* 與 $@ 區(qū)別:
相同點:都是引用所有參數(shù)实胸。
不同點:只有在雙引號中體現(xiàn)出來他嫡。假設在腳本運行時寫了三個參數(shù) 1番官、2、3钢属,徘熔,則 " * " 等價于 "1 2 3"(傳遞了一個參數(shù)),而 "@" 等價于 "1" "2" "3"(傳遞了三個參數(shù))淆党。
代碼實例
#!/bin/bash
echo "-- \$* 演示 ---"
for i in "$*"; do
echo $i
done
echo "-- \$@ 演示 ---"
for i in "$@"; do
echo $i
done
結果
VictordeMac-mini:ShellStudy victor$ ./HelloWorld.sh a b c d
-- $* 演示 ---
a b c d
-- $@ 演示 ---
a
b
c
d
注意:傳入的參數(shù)應從 $1 算起酷师,$0 是腳本地址
實例:
#!/bin/sh
#參數(shù)個數(shù)
paramCount=$#
printf "paramCount=$paramCount\n"
for (( i = 0; i <= paramCount; i++ )); do
#statements
echo ${!i}
done
${!i}表第 i 個參數(shù)
不能在花括號里面是有美元符.
假如有5個參數(shù)讶凉,那么 $# 會是5。 那么 ${$#}就應該是最后一個參數(shù)山孔。然而其實并不是這樣懂讯。必須換成感嘆號。${!#}
執(zhí)行結果:
VictordeMac-mini:ShellStudy victor$ ./OpenFile.sh -a /Applications/Google\ Chrome.app
paramCount=2
./OpenFile.sh
-a
/Applications/Google Chrome.app
$0 不是傳入的參數(shù)台颠,傳入的參數(shù)是 $1,$2, 參數(shù)個數(shù)是2