手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

getoptcvt(1)

名称

getoptcvt - 转换到 getopts 以解析命令选项

用法概要

/usr/lib/getoptcvt [-b] filename
/usr/lib/getoptcvt 

描述

/usr/lib/getoptcvt 读取 filename 中的 shell 脚本,将其转换为使用 getopts 而不是 getopt,然后在标准输出中写入结果。

getopts 是一个内置 Bourne shell 命令,用于解析位置参数和检查有效选项。请参见 sh(1)。它支持命令语法标准的所有适用规则(请参见 Intro(1) 中的规则 3 至 10)。应该使用该命令来替代 getopt 命令。(请参见下文的“附注”部分。)shell 的内置 getopts 命令的语法为:

getopts optstring name [ argument . . . ]

optstring 必须包含使用 getopts 的命令可以识别的选项字母;如果字母后面跟有冒号 (:),则该选项需要有一个参数,或一组参数,必须使用空格将其与参数分隔。

每次被调用时,getopts 会将下一个选项放在 shell 变量 name 中,将下一个要处理的参数的索引放在 shell 变量 OPTIND 中。只要调用 shell 或 shell 脚本,就会将 OPTIND 初始化为 1

如果某个选项需要选项参数,getopts 会将其放置在 shell 变量 OPTARG 中。

如果遇到非法选项,会将 ? 放置在 name 中。

当遇到选项的结尾时,getopts 将以非零退出状态退出。可以使用特殊选项 −− 来限定选项的结尾。

缺省情况下,getopts 解析位置参数。如果在 (argument . . .) getopts 命令行上指定了额外的参数 (argument . . .),getopts 改而对它们进行解析。

这样,所有新命令将遵循 Intro(1) 中介绍的命令语法标准,它们应该使用 getoptsgetopt 来解析位置参数和检查对该命令有效的选项(请参见下文的“附注”部分)。

选项

支持以下选项:

–b

使转换的脚本可移植到 UNIX 系统的早期发行版。/usr/lib/getoptcvt 修改 filename 中的 shell 脚本,使得在执行所得到的 shell 脚本时,由它在运行时确定是调用 getopts 还是 getopt

示例

示例 1 为命令处理参数

以下 shell 程序片段显示了如何为可以接受选项 –a–b,以及选项 –o(该选项需要一个选项参数)的命令处理参数:

while getopts abo: c
do
      case $c in
      a | b)     FLAG=$c;;
      o)         OARG=$OPTARG;;
      \?)        echo $USAGE
                 exit 2;;
      esac
done
shift `expr $OPTIND − 1`
示例 2 等效的代码表达式

此代码将下列各个输入视为等效的:

cmd -a -b -o "xxx z yy" filename
cmd -a -b -o "xxx z yy" -filename
cmd -ab -o xxx,z,yy filename
cmd -ab -o "xxx z yy" filename
cmd -o xxx,z,yy b a filename

环境变量

有关影响 getopts 执行的环境变量 LC_CTYPE、LC_MESSAGES 和 NLSPATH 的描述,请参见 environ(5)

OPTIND

getoptcvt 将该变量用作要处理的下一个参数的索引。

OPTARG

如果某个选项使用了参数,getoptcvt 将使用该变量来存储参数。

退出状态

将返回以下退出值:

0

找到了一个选项,可能是也可能不是由 optstring 指定的。

>0

遇到选项的结尾,或发生错误。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
CSI
enabled(已启用)

另请参见

Intro(1)getopts(1)sh(1)shell_builtins(1)getopt(3C)attributes(5)

诊断

如果 getopts 遇到不包括在 optstring 中的选项字母,将会在标准错误上输出一条错误消息。

附注

尽管在当前实现中,允许放宽以下命令语法规则(请参见 Intro(1)),但也不应使用这些语法规则,因为系统的将来发行版可能不支持它们。如上面的“示例”部分所示,–a–b 均为选项,选项 –o 需要一个选项参数。以下示例违反了规则 5:具有选项参数的选项不得与其他选项组合在一起:

example% cmd -aboxxx filename

以下示例违反了规则 6:在接受选项参数的选项后面必须有空格:

example% cmd -ab oxxx filename

更改 shell 变量 OPTIND 的值或解析不同的参数集合可能会导致意外结果。