码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-01-31 19:33:51      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

getopts简易教程

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

  • 你不需要通过一个外部命令传递参数
  • getopts可以很容易的设置一些你能用于解析参数的变量(对于一个外部程序来说这是不可能的!)
  • 你不必再处理过去一些使用getopt时的一些bug实现(空格, …)
  • getopts已经在POSIX?定义

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

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

介绍

术语

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

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

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

  • -x是一个选项, 一个标识, 一个开关: 一个字符, 有一个前引导短横杠(-)
  • -f也是一个选项,但是这个选项有一个额外参数(传递给-f选项的参数): /etc/mybackup.conf。这个参数通常与它的参数分开(使用一个空格或其他分隔符), 但这不是必须的, -f/etc/mybackup.conf也是合法的。
  • -r依赖于配置。在这个范例中,-r不需要参数,所以它是独立的选项,像-x
  • ./foo.txt和./bar.txt是剩余的参数,不与任何选项关联。这些通常用作聚合参数(比如你指定给cp(1)的文件名)或者不需要选项的参数,因为这是程序的预定义格式(就像你传递给文本编辑器的文件名参数,用于打开和显示文本 - 为何还需要一个额外的开关呢?). POSIX?调用它们作为操作对象

让你体会一下为什么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).

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

标签:

原文地址:http://my.oschina.net/abcfy2/blog/373955

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!