Shell:傳遞命令行參數


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM