shell腳本文件(t.sh)內容:
#!/bin/bash
echo "腳本文件名:$0"
echo "參數1:$1"
echo "參數2:$2"
echo "參數3:$3"
執行腳本:
chmod +x t.sh #賦予腳本文件可執行權限
./t.sh a 1 #執行腳本文件並向其傳遞2個參數:
腳本文件名:./t.sh
參數1:a
參數2:1
參數3:
./t.sh a 1 b c #執行腳本文件並向其傳遞4個參數:
腳本文件名:./t.sh
參數1:a
參數2:1
參數3:b
腳本文件中獲取調用者傳遞的參數用:$n
還有以下特殊情況:
$#
表示傳遞到腳本的參數個數$*
表示以一個單字符串顯示所有向腳本傳遞的參數。$$
表示腳本運行的當前進程ID號$!
表示后台運行的最后一個進程的ID號$@
與$*
相同,依次返回每個參數。$-
表示Shell使用的當前選項,與set命令功能相同。$?
表示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
#!/bin/bash
echo "參數個數:$#"
echo "\$*顯示的:$*"
echo "\$@顯示的:$@"
echo "\$\$顯示的:$$"
echo "\$!顯示的:$!"
echo "\$-顯示的:$-"
echo "\$?顯示的:$?"
執行:
./t.sh 1 2 a b
參數個數:4
$*顯示的:1 2 a b
$@顯示的:1 2 a b
$$顯示的:6252
$!顯示的:
$-顯示的:hB
$?顯示的:0
$@
和$*
的不同:
#!/bin/bash
for i in "$*"; do
echo $i
done
for i in "$@"; do
echo $i
done
執行:
./t.sh 1 2 a b
1 2 a b
1
2
a
b
注意在使用$*
和$@
時要加引號"
。
參數中有特殊字符的處理,用\轉義或用""或’'包裹:
[root@xjb tmp]# cat s.sh
#!/bin/bash
for i in "$@"; do
echo $i
done
[root@xjb tmp]# ./s.sh "sadf" 'da"f' "'d)" d)
-bash: syntax error near unexpected token `)'
[root@xjb tmp]# ./s.sh "sadf" 'da"f' "'d)" d\)
sadf
da"f
'd)
d)