getopts命令詳解

2021-09-30 05:26:08 字數 1832 閱讀 5147

獲取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命令發現冒號後,會從命...