1,



分类: LINUX


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

就可以看到运行命令后解析参数所得到的结果

 


 


2,


echo $*

while getopts ":a:bc" opt

do

        case $opt in

                a ) echo $optarg

                    echo $optind;;

                b ) echo "b $optind";;

                c ) echo "c $optind";;

                ? ) echo "error"

                    exit 1;;

        esac

done

echo $optind

shift $(($optind - 1))

#通过shift $(($optind - 1))的处理,$*中就只保留了除去选项内容(a,b,c )的参数 ,可以在其后进行正常的shell编程处理了。

echo $0

echo $*


 


炊烟起了;夕阳下了;细雨来了 多调试,交互式编程体验 记录,独立思考,对比 感谢转载作者 修车 国产化 read and connect 匍匐前进, 讲故事