Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6276631
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2013-10-17 09:10:18

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 它实现了参数:天 时 分 秒 等全部转换成秒的功能如下:

点击(此处)折叠或打开

  1. SECS=0
  2. MINUTES=0
  3. HOURS=0
  4. DAYS=0
  5. PROCESS=0
  6. while getopts :s:m:h:d:p TIMED 2>/dev/null
  7. do
  8.         case $TIMED in
  9.         s) SECS=$OPTARG
  10.            ;;
  11.         m) ((MINUTES=$OPTARG*60))
  12.            ;;
  13.         h) ((HOURS=$OPTARG*3600))
  14.            ;;
  15.         d) ((DAYS=$OPTARG*86400))
  16.            ;;
  17.         p) PROCESS=$OPTARG
  18.            ;;
  19.         \?) usage
  20.            exit;
  21.           ;;
  22.         esac
  23. done
  24. ((TOTALSECS=$SECS+$MINUTES+$HOURS+$DAYS))
  25. echo "total seconds:$TOTALSECS"

此时 运行命令:bash my_shell.sh -s 20 -m 3 -h 5 -d 8 -p my_shell
就可以看到运行命令后解析参数所得到的结果
阅读(969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~