我知道java,所以做while和case不是问题。我已经阅读了getopts的手册页。它有一些用处。真的,我正在寻找"getopts :d:p:nil optname"正在发生的事情的简单英语解释
而 getopts :d:p:nil optname做 案例$optname 在
shell 脚本是用参数集合调用的,就像 Unix 上的任何其他命令一样。
getopts
内置命令有助于解析这些参数,将它们划分为:
- 没有与其关联的值的标志
- 具有与其关联的值的标志
- 非标志参数(通常但不一定是文件名)
给定循环:
while getopts :d:p:nil optname
没有与其关联的值的标志是 -n
、 -i
和 -l
。 需要值的标志是-d
和-p
。 循环依次处理命令行中的每个标志参数。 选项的单个字母存储在 shell 变量 $optname
中。 如果标志采用值,则为 $OPTARG
.
定义选项的字符串的前导冒号表示getopts
不应报告错误,而将其留给脚本。
当找到选项时,getopts
命令返回成功 (0);当没有更多选项要处理时,它将返回失败(非零,可能是 1)。
一个不以破折号开头的参数,或者因为它遇到了特殊的标记参数--
。
另请参阅 C 编程中的 getopt()
函数。 壳牌的设施就是基于此。
有各种各样的扩展来处理多字母选项名称。 另请参阅在 shell 脚本中使用getopts
bash
以获取长命令行和短命令行选项。
help getopts
中应该有一些有用的信息:
getopts: getopts optstring name [arg]
分析选项参数。
shell 过程使用 Getopts 来解析位置参数 作为选项。
OPTSTRING 包含要识别的选项字母;如果是字母 后跟一个冒号,该选项应具有参数, 应该用空格与它隔开。
每次调用它时,getopts 都会将下一个选项放在 shell 变量$name,初始化名称(如果不存在),以及 要处理到外壳中的下一个参数的索引 可变选择。 OPTIND 每次 shell 或 调用 shell 脚本。 当选项需要参数时, getopts 将该参数放入 shell 变量 OPTARG 中。
。
这里OPTSTRING
是序列:d:p:nil
,name
称为optname
。case
语句将匹配每个不同的选项,而它们被放置在 optstring
中。