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
就可以看到运行命令后解析参数所得到的结果
阅读(5495) | 评论(0) | 转发(1) |