【Linux】shell腳本參數傳遞


  這里介紹參數傳遞的兩種方式。

方式一:$0,$1,$2...

采用$0,$1,$2..等方式獲取腳本命令行傳入的參數

$0:腳本名稱

$1....: 參數

例子:

#編寫一個shell
$ vim test.sh

    echo "參數0參數為:"$0
    echo "參數1參數為:"$1
    echo "參數2參數為:"$2

#執行shell傳遞兩個參數
$ bash test.sh 我是參數1 我是參數2

    參數0參數為:test.sh
    參數1參數為:我是參數1
    參數2參數為:我是參數2

方式二:getopts 

getopts引用的三個環境變量:

  OPTARG: 上一個由getopts內置命令處理的選項參數的值, option argument(存放選項參數),當選項需要選項參數時,getopts 命令就將其置於變量 OPTARG 中

  OPTIND:  下一個由getopts內置命令處理的參數的序號,option index,每次調用腳本它都會被初始值為1,會逐次遞增。

  OPTERR: 如果設為1,bash會顯示getopts的錯誤。設為0,不顯示getopts的錯誤。

 

語法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表示為某個腳本可以使用的選項
":":如果某個選項(option)后面出現了冒號(":"),則表示這個選項后面可以接參數(即一段描述信息DESCPRITION)
VARIABLE:表示將某個選項保存在變量VARIABLE中

A、前面沒有冒號:

會按照系統的定義報錯

a. 指定了非法選項,即不存在的選項,會報錯:scriptname: illegal option — p

b. 選項需要參數但沒有指定,會報錯:scriptname: : option requires an argument –

c. 不論是指定了錯誤的選項或者指定了帶選項的參數沒有指定參數,variable都設置為”?”,對應的OPTARG為出錯的選項

B、選項前面有冒號,可以屏蔽這些錯誤信息,使用自己的反饋信息

a. 當指定的參數不存在時,variable設置為”:”,對應的$OPTARG為”對應的選項”

b. 指定的選項是帶參數的而沒有提供參數,variable設置為”?”,對應的$OPTARG為”這時候的選項”

while getopts ":a:b:c:" opt
do
    case $opt in
        a)
        echo "參數a的值$OPTARG"
        ;;
        b)
        echo "參數b的值$OPTARG"
        ;;
        c)
        echo "參數c的值$OPTARG"
        ;;
        ?)
        echo "未知參數"
        exit 1;;
    esac
done

用一個while循環加case分支獲取不同參數,:a:b:c相當於定義參數的變量名,有時候可能會有未知參數,所以增加一個?的分支。

在shell中執行腳本,結果如下

$ bash test.sh -a 1 -c 3 -d 4
 
#在shell中的輸出
參數a的值1
參數c的值3
未知參數


免責聲明!

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



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