Shell 傳遞參數


我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內部取得參數的格式為:$nn 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推…

實例

#以下實例我們向腳本傳遞三個參數,並分別輸出,其中$0 為執行的檔案名稱:

#!/bin/bash
# author:php中文网
# url:www.php.cn

echo "Shell 传递参数实例!";
echo "执行的文件名:
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
"; echo "第一个参数为:"; echo "第二个参数为:"; echo "第三个参数为:";

為腳本設定可執行權限,並執行腳本,輸出結果如下所示:

#!/bin/bash
# author:php中文网
# url:www.php.cn

echo "Shell 传递参数实例!";
echo "第一个参数为:";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

另外,還有幾個特殊字元用來處理參數:

##說明$#傳遞到腳本的參數數量#$*以一個單一字串顯示所有向腳本傳遞的參數。 $$腳本運行的目前進程ID號碼$!在後台運行的最後一個進程的ID號$@與$*相同,但使用時加引號,並在引號中傳回每個參數。 $-顯示Shell使用的目前選項,與set指令功能相同。 $?顯示最後指令的退出狀態。 0表示沒有錯誤,其他任何值表示有錯誤。
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3
#參數處理
如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。
如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
執行腳本,輸出結果如下所示:

#!/bin/bash
# author:php中文网
# url:www.php.cn

echo "-- $* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- $@ 演示 ---"
for i in "$@"; do
    echo $i
done

$* 與$@ 差異:

  • 相同點:都是引用所有參數。

  • 不同點:只有在雙引號中體現。假設在腳本執行時寫了三個參數1、2、3,,則" * " 等價於"1 2 3"(傳遞了一個參數),而"@" 等價於"1" "2" " 3"(傳遞了三個參數)。

  • $ chmod +x test.sh 
    $ ./test.sh 1 2 3
    -- $* 演示 ---
    1 2 3
    -- $@ 演示 ---
    1
    2
    3
執行腳本,輸出結果如下所示:

rrreee