今天主要介紹一下怎么用getopts工具完善腳本命令行參數。
1. getops
getopts是一個解析腳本選項參數的工具。
(1) 語法格式:getopts [option[:]] [DESCPRITION] VARIABLE
(2) option:表示為某個腳本可以使用的選項.
(3) ":":如果某個選項(option)后面出現了冒號(":"),則表示這個選項后面可以接參數(即一段描述信息DESCPRITION)
(4) VARIABLE:表示將某個選項保存在變量VARIABLE中
getopts是linux系統中的一個內置變量,一般用在循環中。每當執行循環是,getopts都會檢查下一個命令選項,如果這些選項出現在option中,則表示是合法選項,否則不是合法選項。并將這些合法選項保存在VARIABLE這個變量中。
getopts還包含兩個內置變量,及OPTARG和OPTIND:
初次使用要注意這幾點:
2. 實驗
(1) getops參數簡單使用
- #!/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
執行結果:
- ./getopts1.sh -d 'nice' fixnale
說明:
當輸入-d時,$OPT=d,$OPTARG='nice',因此就會顯示d)...這一部分的信息。
由于這里有一個選項(-d)和一個參數('nice'),$OPTIND指向命令行中下一個選項或參數的索引位置,因此這里即為3。
shift $[$OPTIND-1]表示將文件名前面的選項和參數踢掉.
(2) getops參數進一步使用
- #!/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 $*
執行結果:
- ./getopts2.sh -a 11 -b -c 6
說明:
while getopts ":a:bc:" opt #第一個冒號表示忽略錯誤;字符后面的冒號表示該選項必須有自己的參數。
optind初值為1,遇到"x",選項不帶參數,optind+=1;遇到"x:",帶參數的選項,optarg=argv[optind+1],optind+=2;遇到"x::",可選參數,屬于#1和#2之一。