Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1699781
  • 博文数量: 163
  • 博客积分: 10591
  • 博客等级: 上将
  • 技术积分: 1980
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-08 18:17
文章分类

全部博文(163)

文章存档

2018年(1)

2012年(1)

2011年(47)

2010年(58)

2009年(21)

2008年(35)

分类:

2008-07-02 17:35:38

getopts常被用来处理位置参数。
 

getopts optstring name [args]

optstring包含了选项字符,如果一个选项字符后跟着“:”(冒号)则说明此选项还需要一个参数,选项和参数之间应该使用空白符,getopts把参数放入OPTARG变量里。

“:”和“?”是不应该用在选项字符中的。

每次getopts命令被调用时,它把下一个选项字符放入name变量里,如果name不存在则初始化它。并且把下一个选项的索引值放入OPTIND变量里。每次shell或shell脚本被调用执行时OPTIND变量都被初始化为1。OPTIND变量不会被自动重置,所以当同一个脚本中用getopts来处理新的位置参数时需要手工重置。

当遇到选项末尾时,getops返回一个大于零的值。OPTIND变量被设置成第一个非选项的参数索引值。name变量被设置成“?”(问号)。

getopts有两种处理报错的方式。当第一个选项字符是“:”(冒号)时,进入silent模式,或者OPTERR变量被设置为0,也可以进入silent模式,即不报告错误。一般模式时,是报告错误信息的。

如果遇到一个无效的选项字符,name变量被置为“?”(问号)。(1)如果错误报告模式为一般模式,则输出错误信息,并且unset OPTARG变量。(2)如果错误报告模式为silent,则把发现的选项字符放入OPTARG变量,不输出任何诊断信息。

如果需要的一个参数为提供,(1)错误报告模式为一般模式,name变量被置为“?”,OPTARG变量被unset,输出诊断信息。(2)错误报告模式为silent,name变量被置为“:”,发现的选项字符被放入OPTARG变量。

getopts如果查找到由选项字符串指定的或未指定的选项,则返回true(0);如果遇到选项结束或者遇到错误,返回false(>0)。

例子
 

#!/bin/bash
boy=""
girl=""
nothing=""
help=""
while getopts w:n:mh OPT
do
        case $OPT in
        w)
         boy="$OPTARG"
        ;;
        n)
         girl="$OPTARG"
        ;;
        m)
          nothing=y
        ;;
        h)
         echo "$0 -w boyname -n girlname"
        help=y
        ;;
        *)
        echo "Please use -h option to see useage"
        esac
done

if [[ -n "$nothing" ]]
then
        echo "Nothing to do~"

elif [[ -n "$boy" && -n "$girl" ]]
then
        echo "$boy love $girl for ever !!!"
elif [[ -z "$help" ]]
then
        echo "$0 -w boyname -n girlname"
else
        echo "Retry"
fi

阅读(1317) | 评论(0) | 转发(0) |
0

上一篇:CISCO NAT 配置

下一篇:Linux GNU grep

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