getopts的用法
来源:互联网 发布:淘宝上的游侠9账号 编辑:程序博客网 时间:2024/06/06 17:06
标准UNIX命令在执行时都具有相同的命令行格式:
command -options parameters
如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。
该语句格式为:
getopts option_string variable
其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同 option_string相比较。
若有匹配,则把变量variable的值设为该选项。
若无匹配,则variable设为?。
当getopts发现连字符后面没有字符,会返回一个非零的状态值。
Shell程序中可以利用getopts的返回值建立一个循环。
有时选项中还带一个值,getopts命令同样也支持这一功能。
这时需要在option_string中选项字母后加一个冒号。
当getopts命令发现冒号后,会从命令行该选项后读取该值。
若该值存在,那么将被存在一个特殊的变量OPTARG中。
如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。
varname 每次匹配成功的选项
arg 参数列表,没写时它会取命令行参数列表
$OPTIND 特殊变量,option index,会逐个递增, 初始值为1
$OPTARG 特殊变量,option argument,不同情况下有不同的值
细则1:
当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument。 invalid option错误时,varname会被设成?,$OPTARG是出问题的option;miss option argument时,varname会被设成:(在我的fedora系统里测试OPTARG为?),$OPTARG是出问题的option.
当optstring不以”:“开头,invalid option错误和miss option argument错误都会使varname被设成?, $OPTARG是出问题的option(在我的fedora系统里测试OPTARG为空).
细则2:
当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中,如果缺参数,且optstring是以”:“开头,则varname的值会是:(在我的fedora系统里测试OPTARG为?),$OPTARG是该option, 否则varname的值是?,$OPTARG是该option.(参照细则1)(在我的fedora系统里测试OPTARG为空)
if [[ $# -lt 1 ]];then
echo "USAGE:`basename $0` [-a] [-b value] [-c]"
exit 1
fi
while getopts :ab:c name
do
case $name in
a) aflag=1
echo "a"
;;
b) bflag=1
if [[ ${OPTARG:0:1} = "-" ]]; then
echo "invalid parameter of $OPTARG"
exit 1
fi
bval=$OPTARG
;;
c) cflag=1
echo "c"
;;
\?) echo "Invalid option :`basename $0` [-a] [-b value] [-c]"
exit 1
;;
:) echo "$0:Must supply an argument to -$OPTARG."
exit 1
;;
esac
done
echo $bval
在getopts分析选项时,如果-b后面不带参数,直接跟-c的话,那么-c将作为-b的参数。
例子(脚本为getopt):
echo $0
echo $*
while getopts ":a:bc" opt
do
case $opt in
a )
echo $OPTARG
echo $OPTIND;;
b )
echo "b $OPTIND";;
c )
echo "c $OPTIND";;
? )
echo "error"
exit 1;;
esac
done
echo $OPTIND
echo $*
shift $(($OPTIND - 1))
echo $*
echo $0
运行sh getopt.sh -a 12 -b -c 34 -m
输出:
getopt.sh
-a 12 -b -c 34
12
3
b 4
c 5
5
-a 12 -b -c 34
34
getopt.sh
结论:
1、$0在用sh 或者 ./执行脚本时,指的是脚本名,用source或.执行时,永运是bash,这也反应了sh 或者 ./执行脚本的原理和source的方式是不同的.
2、$1 (1....n)指的第一个参数到....第n个参数
3、OPTARG存储相应选项的参数 OPTIND指向的是下一个参数的index
4、shift 会改变参数的顺序,通过左移去掉某些参数
5、getopts检测到非法参数就会停止,比如上例中遇到34就会终止,并不会去检测-m了,只要前一个参数是合法的(包含在option_string中的),就会继续检测下一个参数。
另外,unset OPTIND 可以解决shell脚本的函数中使用getopts。
- *getopts的用法*
- shell 的getopts用法
- getopts的用法
- getopts的用法解读
- getopts的用法
- shell - getopts的实效用法
- getopts用法
- getopts 命令用法总结
- shell getopts 用法
- SHELL:getopts用法介绍
- getopts 用法详解
- shell getopts用法详解
- shell getopts 用法
- shell getopts 用法
- shell getopts 用法
- shell getopts 用法
- shell getopts 用法
- getopts 和 getopt 用法简记
- 382. Linked List Random Node
- JSON基础理解
- 华为oj 密码验证合格程序
- 寻找缺少的整数
- Android TextView两端对齐、文本两端对齐
- getopts的用法
- 查看Android设备的CPU架构信息
- MySQL+InnoDB semi-consitent read原理及实现分析
- SwipeRefreshLayout的事件处理
- c语言结构体内存模型及计算(转载)
- POJ3187 Backward Digit Sums
- SuperMap iObject常见问题解答集锦(四)
- 单例模式
- java命名规范