獲取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 $ $
if [ verbose = y }
then
echo $ $
fi done
getopts 命令用法總結
getopts opstring name args getopts使用者獲得命令列位置引數 opstring 表示引數,表示 前邊的引數需要帶值 name 表示取得的引數,獲得的引數變數儲存到 optarg 裡邊 錯誤 1.opstring以colon 開始,silent error report...
shell 命令getopts用法
寫shell指令碼常見sh test.sh m 2 d 3的寫法 事例指令碼 bin bash while getopts a b c arg 選項後面的冒號表示該選項需要引數 do echo arg arg case arg in a echo a s arg optarg optind 引數存在...
Linux 使用getopts命令獲取命令列引數
linux getopts命令用於獲取命令列中的引數 呼叫格式 getopts option string variable 引數說明 option string 選項名稱 variable 選項的值 選項之間使用冒號 分隔,也可以直接連線,表示選項後面有傳值。當getopts命令發現冒號後,會從命...