【经验总结】脚本如何支持可变参数,参数可以不按顺序输入

脚本如何支持可变参数,参数可以不按顺序输入

by katana

 

 

很多人在写脚本的时候都是使用指定参数个数,例如:

从数据库得到某个部门的所有ip的某一天的cpu使用情况,或cpu使用率在某个范围内的所有ip信息,并按cpu使用大小排序

eg:./get_result.sh [日期] [部门] [CPU/MEM] [(是否排序)Y/N] [min] [max]…………

这样,每次输入我都必须6个参数,即使我不在乎是否排序,不在乎哪个部门,我只要全部门cpu使用率大于30小于50的机器信息,但为了填写cpu使用率的范围就必须输入前面4个参数,而且还必须得按顺序输入,否则就对应出错。

又例如:

mysql的启动可以指定某些参数启动,也可以不指定参数,默认都读取配置文件参数,如果我只关心数据库是否绑定内网ip,我只要输入:

./mysqld_safe --bind-address=192.168.0.1 即可

脚本如何可以做到,用户既可以自己指定参数,不用记住参数的顺序,而不指定参数的时候使用默认参数呢?

可以使用shift命令:

shift命令把所有的参数变量向下移动一个位置,使$2成为$1 $3成为$2依次递进。原来的$1将被丢弃,但$0仍将保持不变。$#会每次shift之后会减少一个。

while test $# -gt 0; do

   case "$1" in

       --help | -h )

               echo_help #打印帮助信息

               exit ;;

       --date=* )

               DATE=`echo "$1" | sed -e "s;--date=;;"`;;

       --type=* )

               TYPE=`echo "$1" | sed -e "s;--type=;;"`;;

       --service_group=* )

               SERVICE_GROUP=`echo "$1" | sed -e "s;--service_group=;;"`;;

       --order=*)

               ORDER=`echo "$1" | sed -e "s;--order=;;"`;;

       --min=*)

               MIN=`echo "$1" | sed -e "s;--min=;;"`;;

       --max=*)

               MAX=`echo "$1" | sed -e "s;--max=;;"`;;

       --* ) echo "无此输入项: $1"; exit 1 ;;

       * ) break ;;

 esac

 shift

done

if [ "$DATE" == "" ]

then

 DATE=`date -d"1 day ago" +%Y-%m-%d`

fi

if [ "$TYPE" == "" ]

then

 TYPE="CPU"

fi

if [ "$SERVICE_GROUP" == "" ]

then

 SERVICE_GROUP="ALL"

fi

if [ "$ORDER" == "" ]

then

 ORDER="N"

fi

if [ "$MIN" == "" ]

then

 MIN=0

fi

if [ "$MAX" == "" ]

then

 MAX=100

fi

例如我要选择默认全部门所有昨天cpu使用率大于30,小于50的ip信息:

./get_result_new.sh --min=30 --max=50  即可,不用输入前面参数的默认值

这样,每个参数都有一个默认值,只有当你输入参数的时候,你输入的参数才会生效,否则都取默认值,这样大大的提高了脚本的可用性,用户感也非常好。

这样的脚本才够专业:)


本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值