天天看點

使用getopts指令解析shell腳本的指令行選項

轉自:http://yejinxin.github.io/parse-shell-options-with-getopts-command/

标準的Unix指令一般都提供很多選項,使用者通過指令行提供具體的選項和參數,格式如下:

command -options parameters filename

getopts是shell内建的一個指令,它可以幫助我們處理指令行選項,使得我們的腳本也可以與unix指令保持風格一緻。getopts的用法格式為:

getopts option_string variable

具體的例子,直接上腳本:

#!/bin/bash 
QUIET=
VERBOSE= DEVICE= LOGFILE=/tmp/default usage() { echo "Usage: `basename $0` [-qv] [-l LOGFILE] -d DEVICE input_file [input_file2...]" exit 1 } [ $# -eq 0 ] && usage #option_string以冒号開頭表示屏蔽腳本的系統提示錯誤,自己處理錯誤提示。 #後面接合法的單字母選項,選項後若有冒号,則表示該選項必須接具體的參數 while getopts :qvd:l: OPTION do  case $OPTION in q) QUIET=y ;; v) VERBOSE=y ;; d) DEVICE=$OPTARG #$OPTARG為特殊變量,表示選項的具體參數 ;; l) LOGFILE=$OPTARG ;; \?) #如果出現錯誤,則解析為? usage ;; esac done #$OPTIND為特殊變量,表示第幾個選項,初始值為1 shift $(($OPTIND - 1)) #除了選項之外,該腳本必須接至少一個參數 if [ $# -eq 0 ]; then  usage fi if [ -z "$DEVICE" ]; then #該腳本必須提供-d選項 echo "You must specify DEVICE with -d option" exit fi echo "you chose the following options.." echo "Quiet=$QUIET VERBOSE=$VERBOSE DEVICE=$DEVICE LOGFILE=$LOGFILE" for file in [email protected] #依次處理剩餘的參數 do  echo "Processing $file" done            

以上是getopts指令的用法例子,可以看到,getopts指令式不支援長選項的。需要注意的是,還有另外一個Linux指令getopt,它可以支援長選項,但不是内置的指令,unix版本和Linux版本的用法也不一樣,用法見另一篇文章。

轉載于:https://www.cnblogs.com/myyan/p/4831723.html

繼續閱讀