getopts简易教程(Small getopts tutorial)译文(未完成)

时间:2015-01-31 19:33:51   收藏:0   阅读:183

getopts简易教程

当你想用一种专业的方式解析命令行参数时,getopts就是要选择的工具。和它的旧版本兄弟命令getopt不同(注意没有s!),getopts是shell内置命令。高级地方表现在

一些其他解析位置参数的其他方法(不用getopt(s))在这里介绍了: 如何处理位置参数.

注意getopts不能解析GNU风格的长选项(–myoption)或XF86风格的长参数(-myoption)!

介绍

术语

需要先了解一下我们这里探讨的事情,所以让我们来看一个范例… 来看一下下面这行命令:

mybackup -x -f /etc/mybackup.conf -r ./foo.txt ./bar.txt

所有这些都叫位置参数,但是你可以把他们分成一些逻辑组:

让你体会一下为什么getopts很有用: 上面的命令可以像这样读取…

mybackup -xrf /etc/mybackup.conf ./foo.txt ./bar.txt

…使用自己的代码去解析很困难。而getopts可以认出所有常见的选项格式。

选项标识可以有大小写,也可以是数字。甚至是其他可识别字符,但是并不推荐这么做(可用性差而且特殊字符可能会出问题)。

原理

一般你需要调用getopts好几次。每次会使用"下一个"位置参数(和一个可能的内容摘要),如果解析成功,会给你返回结果。getopts不会改变位置参数的设定 —— 如果你想要shift掉参数,你必须手工处理:

shift $((OPTIND-1))
# now do something with $@

因为getopts在没有要解析的参数剩余时会返回退出状态FALSE,所以可以很容易的在while循环使用:

while getopts ...; do
  ...
done

getopts将会解析选项和他们可能的参数。遇到第一个非选项的参数时将会停止解析(一个不以连字符(-)开头的字符串,这不是前面任何一个选项的参数)。同样也会在看到–(双连字符)时停止解析,因为这个含义是选项终止

有用的变量

(oschina的markdown不支持表格?那就凑或着看吧)

|变量|描述|

|——–|——–|

|OPTIND|保存下一个要解析的参数的指针。这就是getopts如何"记住"自己的状态和回调请求。同样可以用于在getopts处理过之后shift掉位置参数。OPTIND初始为1, 如果你想要再次使用getopts解析任何参数时需要重新设置为1|

|OPTARG|这个变量设置为被getopts发现的选项的参数。同样包含了未知的选项标记|

|OPTERR|(Values 0 or 1) Indicates if Bash should display error messages generated by the getopts builtin. The value is initialized to 1 on every shell startup - so be sure to always set it to 0 if you don‘t want to see annoying messages!|

getopts also uses these variables for error reporting (they‘re set to value-combinations which arent possible in normal operation).

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!