位置變量:
如果要向一個shell腳本傳遞信息,可以使用位置參數完成此功能;參數相關數目傳入腳本,此數目可以任意多,但只有前9個可以被訪問,使用shift命
令可以改變這個限制;參數從第一個開始,在第九個結束;每個訪問參數前要加$符號;第一個參數為0,表示預留保存實際腳本名字;無論腳本是否有參數,此值
均可用.
變量名:
$0,
$1,
$2,
$3,
$4,
$5,
$6,
$7,
$8,
$9
說明:
$0: 表示腳本名稱。
$1,$2,…,$9:$1表示向腳本傳遞的第一個參數,$2表示向腳本傳遞的第二個參數,…,$9表示向腳本傳遞的第九個參數.
特殊變量(參數)
shell對一些參數做特殊處理,這些參數只能被引用而不能被賦值.
特定shell變量如下:
$# 傳遞到腳本的參數個數;
$* 以一個單字符串顯示所有向腳本傳遞的參數。與位置變量不同,此選項參數可超過9個;
$$ 腳本運行的當前進程ID號;
$! 后臺運行的最后一個進程的進程ID號;
$@ 與$*相同,但是使用時加引號,并在引號中返回每個參數;
$- 顯示shell使用的當前選項,與set命令功能相同;
$? 顯示最后命令的退出狀態.0表示沒有錯誤,其他任何值表明有錯誤;
示例:
[root@localhost bin]# cat test.sh #!/bin/bash # # # # echo "此腳本的名稱$0為:$0" echo "此腳本的第一個位置參數$1為:$1" echo "此腳本的第二個位置參數$2為:$2" echo "此腳本的第三個位置參數$3為:$3" echo "此腳本的第四個位置參數$4為:$4" echo "此腳本的第五個位置參數$5為:$5" echo "此腳本的第六個位置參數$6為:$6" echo "此腳本的第七個位置參數$7為:$7" echo "此腳本的第八個位置參數$8為:$8" echo "此腳本的第九個位置參數$9為:$9" echo "此腳本的第十個位置參數$10為:$10" echo "此腳本的參數的個數為:$#" echo "此腳本的所有參數為$*" echo "此腳本的所有參數為$@"
此腳本輸出結果為:
[root@localhost bin]# pos.sh `seq 1 10` 此腳本的名稱/root/bin/pos.sh為:/root/bin/pos.sh 此腳本的第一個位置參數1為:1 此腳本的第二個位置參數2為:2 此腳本的第三個位置參數3為:3 此腳本的第四個位置參數4為:4 此腳本的第五個位置參數5為:5 此腳本的第六個位置參數6為:6 此腳本的第七個位置參數7為:7 此腳本的第八個位置參數8為:8 此腳本的第九個位置參數9為:9 此腳本的第十個位置參數10為:10 此腳本的參數的個數為:10 此腳本的所有參數為1 2 3 4 5 6 7 8 9 10 此腳本的所有參數為1 2 3 4 5 6 7 8 9 10
$* 和 $@ 的區別
$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。
但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
下面的例子可以清楚的看到 $* 和 $@ 的區別:
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
執行 ./test.sh "a" "b" "c" "d",看到下面的結果:
$*= a b c d "$*"= a b c d $@= a b c d "$@"= a b c d print each param from $* a b c d print each param from $@ a b c d print each param from "$*" a b c d print each param from "$@" a b c d
原創文章,作者:YOUNG,如若轉載,請注明出處:http://www.www58058.com/35639
對各變量總結的很清晰,也通過寫腳本加深自己對變量的理解,課堂練習需要認真完成哦,