-
while getopts ":e:s:pd:l" arg; do case $arg in e) ghs_env=$OPTARG ;; s) ghs_service=$OPTARG ;; p) proxy=`sed '/^PROXY=/!d;s/.*=//' config.properties` ;; d) dir_path=$OPTARG ;; l) if [ -d "log" ]; then rm -r log mkdir log else mkdir log fi log_dir=$(cd `dirname $0`; pwd)/log ;; ?) echo "Usage: $(basename $0) [-e somevalue] [-s somevalue] [-p somevalue] [-d somevalue]" 1>&2 exit 1 ;; esac done
-
getopts有兩個參數,第一個參數是一個字符串,包括字符和" : ", 每一個字符都是一個有效的選項,如果字符后面帶有" : ", 表示這個字符有自己的參數。getopts從命令中獲取這些參數,並且刪去了" - ", 並將其賦值在第二個參數中,即"OPTARG"中,在例子中,$OPTARG存儲相應選項的參數。
-
while getopts ":e:s:pd:l" arg; 這行代碼中,第一個冒號表示忽略系統報錯信息,使用自定義的報錯信息;字符后面的冒號表示該選項必須自己的參數。
-
第一個冒號存在時(自定義報錯信息):
-
當指定的參數不存在時,variable設置為" : ", 對應的$OPTARG為此時的選項 (這個尚未搞明白是什么意思)
-
當指定的選項是帶參數的而沒有提供參數或是非法選項(指定的選項沒有定義),variable設置為" ? ", 對應的$OPTARG為此時的選項
-
-
第一個冒號不存在時(會按照系統的定義報錯):
-
指定了非法選項(不存在的選項或者說是沒有定義的選項),會報錯:
scriptname:illegal option — 選項 -
選項需要參數但沒有指定,會報錯:
scriptname: option requires an argument –選項
-
-
單個字符后面接一個冒號,表示選項必須自己的參數,參數可以緊跟選項后或者以空格隔開,該參數的指針賦給OPTARG。
-
單個字符后面接兩個冒號表示該選項必須自己的參數且參數緊跟選項后不能以空格隔開(我試過,感覺有沒有空格都可以,因此,我覺得如果要加參數,字符后只要寫一個冒號就可以了),該參數的指針賦給OPTARG。
