shell getopts

#!/bin/bash  

while getopts "a:" opt; do  
  case $opt in  
    a)  
      echo "this is -a the arg is ! $OPTARG"   
      ;;  
    \?)  
      echo "Invalid option: -$OPTARG"   
      ;;  
  esac  
done

在使用的時(shí)候就是

./test.sh -a hello

選項(xiàng)之間可以通過冒號(hào) : 進(jìn)行分隔,也可以直接相連接蔫耽,
: 表示選項(xiàng)后面必須帶有參數(shù)筹误,如果沒有可以不加實(shí)際值進(jìn)行傳遞

例如:getopts ahfvc: option表明選項(xiàng)a、h、f进肯、v可以不加實(shí)際值直接使用,而選項(xiàng)c必須在后面帶上值棉磨。使用選項(xiàng)取值時(shí)江掩,必須使用變量OPTARG保存該值。


image.png

而在

 while getopts "a:" opt; do  

中選項(xiàng)a前面有沒有: 則決定的是
(1)前面帶有: 輸入-a但是參數(shù)為空不報(bào)錯(cuò)乘瓤,會(huì)被忽略
(2)前面沒有: 參數(shù)為空?qǐng)?bào)錯(cuò)


在使用getopts命令的時(shí)候频敛,shell會(huì)自動(dòng)產(chǎn)生兩個(gè)變量OPTIND和OPTARG。

一馅扣、shift參數(shù)的使用

很多腳本執(zhí)行的時(shí)候我們并不知道后面參數(shù)的個(gè)數(shù)斟赚,但可以使用$*來獲取所有參數(shù)。但在程序處理的過程中有時(shí)需要逐個(gè)的將$1差油、$2拗军、$3……$n進(jìn)行處理,shift命令的作用就是在執(zhí)行完$1后蓄喇,將$2變?yōu)?1发侵,$3變?yōu)?2,依次類推妆偏。

#!/bin/bash
until [ $# -eq 0 ]
do
    echo "第一個(gè)參數(shù)為: $1 參數(shù)個(gè)數(shù)為: $#"
    shift
done

輸出為
第一個(gè)參數(shù)為: 1 參數(shù)個(gè)數(shù)為: 4
第一個(gè)參數(shù)為: 2 參數(shù)個(gè)數(shù)為: 3
第一個(gè)參數(shù)為: 3 參數(shù)個(gè)數(shù)為: 2
第一個(gè)參數(shù)為: 4 參數(shù)個(gè)數(shù)為: 1

getopts參數(shù)的使用

#!/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é)果如下

[root@localhost ~]# sh getopts.sh -a 11 -b -c 6
-a 11 -b -c 6
11 3
b 4
c 6
6
getopts.sh

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之一(轉(zhuǎn)載過來的气忠,這句我也看不懂)

第一行輸出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铁瞒;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桅滋,隨后出現(xiàn)的幾起案子慧耍,更是在濱河造成了極大的恐慌,老刑警劉巖丐谋,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芍碧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡号俐,警方通過查閱死者的電腦和手機(jī)泌豆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吏饿,“玉大人踪危,你說我怎么就攤上這事蔬浙。” “怎么了敛滋?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵绎晃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我咱揍,道長(zhǎng)煤裙,這世上最難降的妖魔是什么硼砰? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任诈胜,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坞笙。我一直安慰自己薛夜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布吮龄。 她就那樣靜靜地躺著,像睡著了一般尝抖。 火紅的嫁衣襯著肌膚如雪昧辽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼块仆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绷雏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼箭跳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屉来,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤亿驾,失蹤者是張志新(化名)和其女友劉穎儡蔓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尝哆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了规阀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恒序。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谁撼,靈堂內(nèi)的尸體忽然破棺而出歧胁,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布与帆,位于F島的核電站了赌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏玄糟。R本人自食惡果不足惜勿她,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阵翎。 院中可真熱鬧逢并,春花似錦、人聲如沸郭卫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贰军。三九已至玻蝌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間词疼,已是汗流浹背俯树。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贰盗,地道東北人许饿。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舵盈,于是被迫代替她去往敵國和親陋率。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容