文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>getopts

getopts

时间:2010-08-23  来源:nianzong


ENVIRONMENT VARIABLES

OPTARG 

stores the value of the option argument found by getopts.

OPTIND 

contains the index of the next argument to be processed.

关于OPTIND解释很好懂,是"下一个选项的索引值". 但是实际输出我是完全搞不懂. 经过查阅众多文章和讨论帖,加上自己的实践,终于对这个变量有了一个相对清晰的了解.
#OPTIND 记录准备分析(即下一次分析)的第几个参数,如果我们不使用function,而是直接作为脚本,每次执行OPTIND将重新初始化,但是如果我们使用 function的方式,OPTIND将保持上次的值,即getopts接着分析第N个参数,例如第5个参数,所以需要unset,以保证正确。如果我们 用-ab表示-a -b,当分析完-a之后,OPTIND并不加一,保持原值,下次仍然分析该位置参数,如果-b arg,则OPTIND加二。所以我们不需要在getopts中进行shift,可以在完成所有getopts分析后,统一进行shift $(($OPTIND - 1))

关键点: 要搞清楚"自己的索引值"和"下一个选项的索引值"
while getopts ":d:ef" opt; do
这里,第一个冒号表示忽略错误(例如出现了不认识的参数),并在脚本中通过::)来处理这样的错误;字母d则表
示,接受参数-d;d后面的冒号表示参数d接收值,即“-d 9”这样的形式;(这里opt变量,可以在while循环中
引用当前找到的参数,试试输出$opt试试)
最前面的冒号是用来屏蔽输出自带错误信息的.
If the first character of optstring is a colon, silent error reporting is used.

举例分析: getopts.sh
#!/bin/bash
while getopts ":ab:c:" opt
do
    case $opt in
    a)
    echo "$opt | $OPTIND | $OPTARG";
    ;;
    b)
    echo "$opt | $OPTIND | $OPTARG";
    ;;
    c)
    echo "$opt | $OPTIND | $OPTARG";
    ;;
    \?) echo "no this option"
    ;;
    esac
done
    echo "$OPTIND"
    echo "$@||$#||$1,$2,$3,$4";
    shift $(($OPTIND-1));
    echo "$@||$#";
#END
第一种情形:
daihj@51sa:~$ sh getopts.sh -a -b "b b" -c "c c"
a | 2 |
b | 4 | b b
c | 6 | c c
6
-a -b b b -c c c||5||-a,-b,b b,-c
||0
#$OPTIND的初始值为1,-a选项自身的索引为1,那么它下一个选项的索引自然是2; -b位置时,$OPTIND此时要加2,而不是加1,因为-b拥有自己的参数, 所以$OPTIND此时变成4; 同理, 到-c选项时$OPTIND也是加2,最后$OPTIND为6.
daihj@51sa:~$ sh getopts.sh -ab "b b" -c "c c"
a | 1 |
b | 3 | b b
c | 5 | c c
5
#$OPTIND为1,因为下一个选项-b与-a写成了-ab的形式,所以到b选项时$OPTIND的索引值保持不变,仍旧为1; c选项时的$OPTIND加2,
daihj@51sa:~$ sh getopts.sh -b "b b" -c "c c"  
b | 3 | b b
c | 5 | c c
5
-b b b -c c c||4||-b,b b,-c,c c
||0

daihj@51sa:~$ sh getopts.sh -b "b b" -c "c c"  
b | 3 | b b
c | 5 | c c
5
-b b b -c c c||4||-b,b b,-c,c c
||0

http://www.mkssoftware.com/docs/man1/getopts.1.asp
http://www.adp-gmbh.ch/unix/shell/getopts.html
http://aplawrence.com/Unix/getopts.html
http://blog.csdn.net/flowingflying/archive/2010/01/03/5126066.aspx
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载