shell getopt 用法
來源:互聯網
上載者:User
擷取UNIX類型的選項: unix有一個優點就是標準UNIX命令在執行時都具有相同的命令列格式: command -options parameters 如果在執行Shell程式也採用上述格式,Bourne Shell中提供了一條擷取和處理命令列選項的語句,即getopts語句。該語句的格式為: getopts option_string variable 其中option_string中包含一個有效單字元選項。若getopts命令在命令列中發現了連字號,那麼它將用連字號後面的字元同option_string相比較。若有匹配,則把變數variable的值設為該選項。若無匹配,則variable設為?。當getopts發現連字號後面沒有字元,會返回一個非零的狀態值。Shell程式中可以利用getopts的傳回值建立一個迴圈。 下面代碼說明了date命令中怎麼使用getopts命令處理各種選項,該程式除了完成unix的標準命令date的功能外,還增加了許多新的選項。
#新date程式
if [ $# -lt 1 ]
then
date
else
while getopts mdyDHMSTJjwahr OPTION
do
case $OPTION
in
m)date '+%m';;
d)date '+%d';;
y)date '+%y';;
D)date '+%D';;
H0date '+%H';;
M)date '+%M';;
S)date '+%S';;
T)date '+%T';;
j)date '+%j';;
J)date '+%y%j';;
w)date '+%w';;
a)date '+%a';;
h)date '+%h';;
r)date '+%r';;
/?)echo "無效的選項!$OPTION";;
esac
done
fi 有時侯選項中還帶一個值,getopts命令同樣也支援這一功能。這時需要在option_string中選項字母后加一個冒號。當getopts命令發現冒號後,會從命令列該選項後讀取該值。若該值存在,那麼將被存在一個特殊的變數OPTARG中。如果該值不存在,getopts命令將在OPTARG中存放一個問號,並且在標準錯誤輸出上顯示一條訊息。 下面的例子,實現拷貝一個檔案,並給檔案賦一個新的名字。-c選項指定程式拷貝的次數,-v選項要求顯示新建立檔案的檔案名稱。 #--拷貝程式 COPIES=1
VERBOSE=N
while getopts vc:OPTION
do
case $OPTION
in
c)COPIES=$OPTARG;;
v)VERBOSE=Y;;
/?)echo "無效參數!"
exit 1;;
esac
done
if [ $OPTIND -gt $# ]
then
echo "No file name specified"
exit 2
fi
shift 'expr $OPTIND - 1'
FILE=$1
COPY=0
while [ $COPIES -gt $COPY ]
do
COPY='expr $COPY + 1'
cp $FILE $ {FILE} $ {COPY}
if [ VERBOSE = Y }
then
echo ${FILE} $ {COPY}
fi
done
另外一個例子:#!/bin/bash
while getopts "ab:cd:" Option
# b and d take arguments
#
do
case $Option in
a) echo -e "a = $OPTIND";;
b) echo -e "b = $OPTIND $OPTARG";;
c) echo -e "c = $OPTIND";;
d) echo -e "d = $OPTIND $OPTARG";;
esac
done
shift $(($OPTIND - 1))