Shell 擷取參數的方式

來源:互聯網
上載者:User

標籤:style   http   color   使用   os   io   strong   for   

 

Shell 擷取參數的方式

寫shell指令碼的時候,往往需要從外部擷取參數,例如:

$ sh demo.sh a

那麼如何將上面的參數a傳到shell程式裡面呢。
最常用的是,$0 $1... $10,這些位置變數 其中$0是shell程式的名字,$1,$2...分別為第一個參數,第二個參數... 我們demo.sh 如下所示:

$ cat demo.sh#! /bin/bashcat << EOF     Usage: sh $0 $1EOF$ sh demo.sh a Usage: sh demo.sh a

$開頭的參數有:

$0: 程式的名字
$#: 變數的個數
[email protected]:所有的變數,即:$1...$最後,不包括程式的名字

這有一個問題,當參數很多的時候,別人用你的程式時,互動性不是很好,別人還得記住指令碼每一個參數的位置和作用,會很麻煩。這時可以加提示符:例如

$ sh demo.sh -a A -b B -c C 

那這個怎麼實現呢? 實現的方式有兩種 利用shiftgetopts

$ cat demo.sh #! /bin/bashwhile [ $# -gt 0 ];do   case $1 in   -a) echo "-a----$2"       shift       ;;   -b) echo "-b----$2"       shift       ;;   -c) echo "-c----$2"       shift       ;;   esac   shiftdone$ sh demo.sh -a A -b B -c C-a----A-b----B-c----C

getopts函數則簡化上面的選項處理過程。我們下面來看看它的使用方法。
函數的第一個參數:合法選項字母的一個字串, 如果字母后面後·:則表示必須要提供參數,這時getopts函數會將參數放到OPTARG中,另外一個變數是OPTIND代表下一個待處理參數的索引值。
函數的第二個參數:變數名稱,每次getopts被調用的時候,都會被更新,這個變數名字是沒有限制的。getopts在找不到合法的選項的時候會將這個變數設定為一個問號。具體的實現如下所示:

#! /bin/bashwhile getopts a:b:c: opt;docase $opt ina) echo "-a ---- $OPTARG"   ;;b) echo "-b ---- $OPTARG"   ;;c) echo "-c ---- $OPTARG"   ;;?) echo "$opt is an invalid option"   ;;esacdone$ sh demo.sh -a A -b B -c C -d-a ---- A-b ---- B-c ---- Cdemo.sh: illegal option -- d      --getopts輸出的錯誤資訊? is an invalid option            --指令碼判斷輸出的錯誤資訊,這裡將-d option設定為了? 

但是getopts並不能處理長選項,這時可以藉助getopt,大家可以man一下:

NAME
getopt - parse command options (enhanced)

從基本解釋可以看出,它是一個加強版的getopts,雖然getopts比它還多了一個s,但是論功力,還是遠遠不如getopt

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.