0

我知道 java 所以 do while 和 case 没有问题。我已经阅读了 getopts 的手册页。它已经有些用处了。我真的在寻找“getopts :d:p:nil optname”发生的事情的简单英文解释

而 getopts :d:p:nil optname
做
 案例 $optname 在
4

2 回答 2

3

与 Unix 上的任何其他命令一样,使用一组参数调用 shell 脚本。

getopts内置命令有助于解析这些参数,将它们分为:

  • 没有与之关联的值的标志
  • 带有关联值的标志
  • 非标志参数(通常但不一定是文件名)

给定循环:

while getopts :d:p:nil optname

没有与之关联的值的标志是-n,-i-l. 需要值的标志是-d-p。循环依次处理命令行中的每个标志参数。该选项的单个字母存储在 shell 变量$optname中。如果标志有一个值,那么它在$OPTARG.

定义选项的字符串的前导冒号表示getopts不应报告错误,将其留给脚本。

找到选项时,该getopts命令返回成功 (0);当没有更多选项要处理时,它返回失败(非零,可能为 1)。

这可能是因为它遇到了一个不以破折号开头的参数,或者因为它遇到了特殊的标记参数--

另请参见getopt()C 编程中的函数。shell的功能就是以此为基础的。

有各种扩展来处理多字母选项名称。另请参阅在shell 脚本中使用以获取长短命令行选项getoptsbash

于 2013-11-11T16:10:22.510 回答
0

中应该有一些有用的信息help getopts

getopts:getopts 选择字符串名称 [arg]

解析选项参数。

外壳程序使用 Getopts 将位置参数解析为选项。

OPTSTRING 包含要识别的选项字母;如果一个字母后跟一个冒号,则该选项应该有一个参数,它应该用空格与它分开。

每次调用getopts都会将下一个选项放入shell变量$name中,如果name不存在则初始化name,下一个要处理的参数的索引放入shell变量OPTIND中。每次调用 shell 或 shell 脚本时,都会将 OPTIND 初始化为 1。当一个选项需要一个参数时,getopts 将该参数放入 shell 变量 OPTARG。

...

OPTSTRING是序列:d:p:nilname称为optname。该case语句将匹配每个不同的选项,而它们被放置在optstring.

于 2013-11-11T16:12:36.507 回答