1.概述
getopts從符合标準POSIX.2選項文法的參數清單中擷取選項及其參數(也就是,單個字母前面帶有 - ,可能後跟參數值;單個字母可以分組)。通常,shell腳本使用getopts來解析傳遞給它們的參數。 當在getopts指令行中指定參數時,getopts将解析這些參數,而不是解析腳本指令行。
Example:
sh test.sh -d 20170120 -p ios -k
getopts就是從上述指令行中擷取選項d,p,k以及對應的參數 20170120,ios(如果有)。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB621acb230335b56786b61d035ec7e1ca%3Fmethod%3Ddownload%26read%3Dtrue#2-%E8%AF%AD%E6%B3%95 2. 文法
getopts optstring name [arg ...]
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB621acb230335b56786b61d035ec7e1ca%3Fmethod%3Ddownload%26read%3Dtrue#3-%E6%8F%8F%E8%BF%B0 3. 描述
optstring列出了需要識别腳本中的所有選項字母。 例如,如果需要識别腳本-a,-f和-s選項,則optstring為afs。如果希望識别選項字母以及後面的參數值或值組。例如,請識别腳本-d 20170120 -p ios,則 optstring為d:p:,在字母後面加一個冒号。 是以getopts期望的選項格式:
-o value
通常,選項與參數之間有一個或多個空格,但是getopts也可以處理選項後面直接跟參數的情形,如:
-optvalue
備注
optstring不能包含問号(?)字元。
getopts指令行上的名稱是shell變量的名稱。 每次調用getopts時,它都會從位置參數中擷取下一個選項,并将選項字母放在shell變量名稱中。
getopts在名稱中放置一個問号(?),如果它找到一個不出現在optstring中的選項,或者缺少一個選項值。
腳本指令行上的每個選項都有一個數字索引。初始索引為1, 找到的一個選項後索引加1,找到一個參數後索引加2,依此類推。 當getopts從腳本指令行擷取選項時,它将在shell變量OPTIND中存儲要處理的下一個參數的索引。
當一個選項字母有一個關聯的參數(在optstring中用a:表示)時,getopts将該參數作為一個字元串存儲在shell變量OPTARG中。 如果一個選項沒有參數,或getopts期望得到一個參數,但是沒有找到,getopts 重置 OPTARG。
當getopts到達選項的末尾時,退出,狀态值為1.它還設定名稱為字元? 并将OPTIND設定為選項後的第一個參數的索引。 getopts通過以下任何條件識别選項的結束:
- 不是以 - 開頭的參數
- 特殊參數 - ,标記選項的結束
- 錯誤(例如,無法識别的選項字母)
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB621acb230335b56786b61d035ec7e1ca%3Fmethod%3Ddownload%26read%3Dtrue#4-example 4. Example
#! /bin/bash
echo "init index "${OPTIND}
while getopts 'd:p:k' opt;
do
case ${opt} in
d)
date="${OPTARG}";;
p)
platform="${OPTARG}";;
k)
haveKey="true";;
?)
echo "Usage: `basename $0` [options] filename"
exit 1
esac
echo "opt is "${opt}", arg is "${OPTARG}", after index is "${OPTIND}
done
echo "date is "${date}", platform is "${platform}", haveKey is "${haveKey}
測試:
xiaosi@yoona:~$ sh test.sh -d 20170120 -p ios -k --
init index 1
opt is d, arg is 20170120, after index is 3
opt is p, arg is ios, after index is 5
opt is k, arg is , after index is 6
date is 20170120, platform is ios, haveKey is true
原文:
https://www.mkssoftware.com/docs/man1/getopts.1.asp