您好,登錄后才能下訂單哦!
Shell腳本中getopts如何使用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1. getops
getopts是一個解析腳本選項參數的工具。
(1) 語法格式:getopts [option[:]] [DESCPRITION] VARIABLE
(2) option:表示為某個腳本可以使用的選項.
(3) ":":如果某個選項(option)后面出現了冒號(":"),則表示這個選項后面可以接參數(即一段描述信息DESCPRITION)
(4) VARIABLE:表示將某個選項保存在變量VARIABLE中
getopts是linux系統中的一個內置變量,一般用在循環中。每當執行循環是,getopts都會檢查下一個命令選項,如果這些選項出現在option中,則表示是合法選項,否則不是合法選項。并將這些合法選項保存在VARIABLE這個變量中。
getopts還包含兩個內置變量,及OPTARG和OPTIND:
OPTARG就是將選項后面的參數(或者描述信息DESCPRITION)保存在這個變量當中。
OPTIND:這個表示命令行的下一個選項或參數的索引(文件名不算選項或參數)
初次使用要注意這幾點:
腳本位置參數會與optstring中的單個字母逐個匹配,如果匹配到就賦值給name,否則賦值name為問號;
optstring中單個字母是一個選項,如果字母后面加冒號,表示該選項后面帶參數,參數值并會賦值給OPTARG變量;
optstring中第一個是冒號,表示屏蔽系統錯誤(test.sh: illegal option -- h);
允許把選項放一起,例如-ab
2. 實驗
(1) getops參數簡單使用
#!/bin/bash while getopts ':b:d:' OPT &> /dev/null;do case $OPT in b) echo "The options is b" echo $OPTARG ;; d) echo "The options is d" echo $OPTARG ;; *) echo "Wrong Options" exit 7 ;; esac # echo $OPT # echo $OPTARG done echo $OPTIND shift $[$OPTIND-1] echo $1
執行結果:
./getopts1.sh -d 'nice' fixnale
說明:
當輸入-d時,$OPT=d,$OPTARG='nice',因此就會顯示d)...這一部分的信息。
由于這里有一個選項(-d)和一個參數('nice'),$OPTIND指向命令行中下一個選項或參數的索引位置,因此這里即為3。
shift $[$OPTIND-1]表示將文件名前面的選項和參數踢掉.
(2) getops參數進一步使用
#!/bin/bash echo $* while getopts ":a:bc:" opt do case $opt in a) echo $OPTARG $OPTIND;; b) echo "b $OPTIND";; c) echo "c $OPTIND";; ?) echo "error" exit 1;; esac done echo $OPTIND shift $(( $OPTIND-1 )) echo $0 echo $*
執行結果:
./getopts2.sh -a 11 -b -c 6
說明:
while getopts ":a:bc:" opt #第一個冒號表示忽略錯誤;字符后面的冒號表示該選項必須有自己的參數。
$optarg 存儲相應選項的參數,如上例中的11、6;
$optind 總是存儲原始$*中下一個要處理的選項(不是參數,而是選項,此處指的是a,b,c這三個選項,而不是那些數字,當然數字也是會占有位置的)位置。
optind初值為1,遇到"x",選項不帶參數,optind+=1;遇到"x:",帶參數的選項,optarg=argv[optind+1],optind+=2;遇到"x::",可選參數,屬于#1和#2之一。
第一行輸出echo $*
第二行,optind初值為1,選項-a的參數為11,下一個要處理的選項-b位置為3,所以輸出:11 3;
第三行,然后-b要處理的下一個選項-c位置為4,所以輸出:b 4;
第四行,再者-c有參數,所以下一個要處理的位置+2,所以輸出:c 6;
看完上述內容,你們掌握Shell腳本中getopts如何使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。