unix shell學習之getopts解析命令行參數
getopts命令內置於shell中,可以獲取由單個字符所指定的有效命令行參數,單個字符有一個‘ - ’號或‘ + ’號。
簡單的說,比如運行命令:
iptables -t nat -A POSTROUTING -p tcp -o eth0 -s 192.168.2.0/24 -j SNAT --to public_ip
它實現了內網ip轉換成公網ip訪問外網的功能,但是這麼多的參數怎麼解析的呢,getopts就是實現像這種參數的解析。
所以getopts是一個非常實用的工具,在你編寫腳本時,能夠很方便的幫助你解析命令行參數,但是它具體是怎麼解析的呢,
如腳本提供命令行參數: -s 5 -m 10 -d 2 -p my_shell
解析時使用 getopts :s:m:h:d:p
這表明對於指定的項 s、m、d、p等如果在每個開關前加入“:”表示 這個開關項需要一個參數。
具體見代碼my_shell.sh 它實現了參數:天 時 分 秒 等全部轉換成秒的功能如下:
點擊(此處)折疊或打開
SECS=0
MINUTES=0
HOURS=0
DAYS=0
PROCESS=0
while getopts :s:m:h:d:p TIMED 2>/dev/null
do
case $TIMED in
s) SECS=$OPTARG
;;
m) ((MINUTES=$OPTARG*60))
;;
h) ((HOURS=$OPTARG*3600))
;;
d) ((DAYS=$OPTARG*86400))
;;
p) PROCESS=$OPTARG
;;
\?) usage
exit;
;;
esac
done
((TOTALSECS=$SECS+$MINUTES+$HOURS+$DAYS))
echo "total seconds:$TOTALSECS"
此時 運行命令:bash my_shell.sh -s 20 -m 3 -h 5 -d 8 -p my_shell
就可以看到運行命令後解析參數所得到的結果