獲取UNIX類型的選項:
unix有一個優點就是標準UNIX命令在執行時都具有相同的命令行格式:
command -options parameters
如果在執行Shell程序也採用上述格式,Bourne Shell中提供了一條獲取和處理命令行選項的語句,即getopts語句。該語句的格式為:
getopts option_string variable
其中option_string中包含一個有效的單字元選項。若getopts命令在命令行中發現了連字元,那麼它將用連字元後面的字元同option_string相比較。若有匹配,則把變數variable的值設為該選項。若無匹配,則variable設為?。當getopts發現連字元後面沒有字元,會返回一個非零的狀態值。Shell程序中可以利用getopts的返回值建立一個循環。
有時侯選項中還帶一個值,getopts命令同樣也支持這一功能。這時需要在option_string中選項字母后加一個冒號。當getopts命令發現冒號后,會從命令行該選項後讀取該值。若該值存在,那麼將被存在一個特殊的變數OPTARG中。如果該值不存在,getopts命令將在OPTARG中存放一個問號,並且在標準錯誤輸出上顯示一條消息。
optstring option字元串,會逐個匹配
varname 每次匹配成功的選項
arg 參數列表,沒寫時它會取命令行參數列表
$OPTIND 特殊變數,option index,會逐個遞增, 初始值為1
$OPTARG 特殊變數,option argument,不同情況下有不同的值
細則1:當optstring以”:“開頭時,getopts會區分invalid option錯誤和miss option argument錯誤。
invalid option時,varname會被設成?,$OPTARG是出問題的option;
miss option argument時,varname會被設成:,$OPTARG是出問題的option。
如果optstring不以”:“開頭,invalid option錯誤和miss option argument錯誤都會使
varname被設成?,$OPTARG是出問題的option。
細則2:當optstring中的字母跟”:“時,表明該option可接參數,參數(argument)放在$OPTARG中;
如果缺參數,且optstring是以”:“開頭,則varname的值會是:,$OPTARG是該option,
否則varname的值是?,$OPTARG是該option。(參照細則1)
---------------
$ # 傳遞到腳本的參數個數
$ * 以一個單字元串顯示所有向腳本傳遞的參數。與位置變數不同,此選項參數可超過9個
$ $ 腳本運行的當前進程I D號
$ ! 後台運行的最後一個進程的進程I D號
$ @ 與$ #相同,但是使用時加引號,並在引號中返回每個參數
$ - 顯示s h e l l使用的當前選項,與s e t命令功能相同
$ ? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
------------
shift 用於重新分配位置參數,其實就是把向參數左移動一個位置如:$1<--$2,$2<--$3老的$1將被刪 除掉。
------------
範例:
[root@localhost ~]# cat getopts2
#!/bin/sh
while getopts :ab: name
do
case $name in
a) aflag=1
;;
b) bflag=1
bval=$OPTARG
;;
\?) echo "USAGE:`basename $0` [-a] [-b value]"
exit 1
;;
esac
done
if [ ! -z $aflag ] ; then
echo "option -a specified"
echo "$aflag"
echo "$OPTIND"
fi
if [ ! -z $bflag ] ; then
echo "option -b specified"
echo "$bflag"
echo "$bval"
echo "$OPTIND"
fi
echo "here $OPTIND"
shift $(($OPTIND -1))
echo "$OPTIND"
echo " `shift $(($OPTIND -1))` "
[火星人 ] linux getopts學習筆記已經有335次圍觀