Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91712
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-19 08:56
文章分类

全部博文(12)

文章存档

2015年(8)

2014年(4)

我的朋友

分类: LINUX

2014-08-21 19:43:40


点击(此处)折叠或打开

  1. #!/bin/bash
  2. #testopt.sh
  3. if [[ $# -lt 1 ]];then
  4.     echo "Usage:`basename $0` [-p] [-q value] [-m value] "
  5.     exit 1
  6. fi
  7. echo "The value of OPTIND is :$OPTIND"
  8. #注意看第一个冒号,前面加冒号,代表开启静默模式,抑制正常的错误信息,而由脚本自己处理
  9. while getopts ":pq:m:" optname
  10. do
  11.         echo "The value of optname is : $optname"
  12.         case $optname in
  13.                 "p")
  14.                         echo "Option $optname is specified"
  15.                 ;;
  16.                 "q")
  17.                         echo "Option $optname has args $OPTARG"
  18.                 ;;
  19.                 "m")
  20.                         echo "Option $optname has args $OPTARG"
  21.                 ;;
  22.                 "?")
  23.                         echo "Unknown option $OPTARG"
  24.                 ;;
  25.                 ":")
  26.                         echo "No argument value for option $OPTARG"
  27.                 ;;
  28.                 *)
  29.                         echo "Wrong parameter"
  30.                 ;;
  31.         esac
  32.         echo "The value of OPTIND is :$OPTIND"
  33. done
执行结果如下
[ L:tmp$ ]sh testopt.sh -r -p -q -d -m            //共五个
The value of OPTIND is :1                                 //OPTIND为变量,初值为1,之后代表指向下一个索引的值
The value of optname is : ?                              //由于开启静默模式,因此无效的选项(比如-r)被当作“?”处理,即$optname的值为?,而$OPTARG的值为r
Unknown option r
The value of OPTIND is :2
The value of optname is : p
Option p is specified
The value of OPTIND is :3
The value of optname is : q                              //第二个和第三个冒号代表该选项后面需要接参数。当-q后直接接-d时,会把-d当作-q的参数来处理
Option q has args -d
The value of OPTIND is :5                                  //此处指向第五个选项-m
The value of optname is : :                               //由于m后接冒号,代表需要跟参数,而此时无参数,$optname的值被当作": "来处理
No argument value for option m
The value of OPTIND is :6

修改脚本去掉第一个冒号,及告诉getopts关闭静默,执行结果如下:
The value of OPTIND is :1
testopt.sh: illegal option -- r
The value of optname is : ?
                 //关闭静默模式后,无效的选项被当作?来处理
Unknown option
The value of OPTIND is :2
The value of optname is : p
Option p is specified
The value of OPTIND is :3
The value of optname is : q
Option q has args -d
The value of OPTIND is :5
testopt.sh: option requires an argument -- m
The value of optname is : ?
Unknown option                                                 //关闭静默模式后,无效的参数也被当作?来处理
The value of OPTIND is :6

当什么参数都不添加时,是不会进入循环的,因此最好加上下面的判断
if [[ $# -lt 1 ]];then
    echo "Usage:`basename $0` [-p] [-q value] [-m value] "
    exit 1
fi
阅读(2661) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:xenserver 6.2 PXE 无人值守安装

给主人留下些什么吧!~~