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