| Current File : //usr/man/zh_CN.UTF-8/man1/getoptcvt.1 |
'\" te
.\" Copyright 1989 AT&T
.\" Copyright (c) 2000, Sun Microsystems, Inc. All Rights Reserved
.TH getoptcvt 1 "2000 年 1 月 7 日" "SunOS 5.11" "用户命令"
.SH 名称
getoptcvt \- 转换到 getopts 以解析命令选项
.SH 用法概要
.LP
.nf
\fB/usr/lib/getoptcvt\fR [\fB-b\fR] \fIfilename\fR
.fi
.LP
.nf
\fB/usr/lib/getoptcvt\fR
.fi
.SH 描述
.sp
.LP
\fB/usr/lib/getoptcvt\fR 读取 \fIfilename\fR 中的 shell 脚本,将其转换为使用 \fBgetopts\fR 而不是 \fBgetopt\fR,然后在标准输出中写入结果。
.sp
.LP
\fBgetopts\fR 是一个内置 Bourne shell 命令,用于解析位置参数和检查有效选项。请参见 \fBsh\fR(1)。它支持命令语法标准的所有适用规则(请参见 \fBIntro\fR(1) 中的规则 3 至 10)。应该使用该命令来替代 \fBgetopt\fR 命令。(请参见下文的“附注”部分。)shell 的内置 \fBgetopts\fR 命令的语法为:
.sp
.LP
\fBgetopts\fR \fIoptstring\fR \fI name\fR [ \fIargument\fR . . . ]
.sp
.LP
\fIoptstring\fR 必须包含使用 \fBgetopts\fR 的命令可以识别的选项字母;如果字母后面跟有冒号 (\fB:\fR),则该选项需要有一个参数,或一组参数,必须使用空格将其与参数分隔。
.sp
.LP
每次被调用时,\fBgetopts\fR 会将下一个选项放在 shell 变量 \fIname\fR 中,将下一个要处理的参数的索引放在 shell 变量 \fBOPTIND\fR 中。只要调用 shell 或 shell 脚本,就会将 \fBOPTIND\fR 初始化为 \fB1\fR。
.sp
.LP
如果某个选项需要选项参数,\fBgetopts\fR 会将其放置在 shell 变量 \fBOPTARG\fR 中。
.sp
.LP
如果遇到非法选项,会将 \fB?\fR 放置在 \fIname\fR 中。
.sp
.LP
当遇到选项的结尾时,\fBgetopts\fR 将以非零退出状态退出。可以使用特殊选项 \fB--\fR 来限定选项的结尾。
.sp
.LP
缺省情况下,\fBgetopts\fR 解析位置参数。如果在 (\fIargument\fR . . .) \fBgetopts\fR 命令行上指定了额外的参数 (argument . . .),\fBgetopts\fR 改而对它们进行解析。
.sp
.LP
这样,所有新命令将遵循 \fBIntro\fR(1) 中介绍的命令语法标准,它们应该使用 \fBgetopts\fR 或 \fBgetopt\fR 来解析位置参数和检查对该命令有效的选项(请参见下文的“附注”部分)。
.SH 选项
.sp
.LP
支持以下选项:
.sp
.ne 2
.mk
.na
\fB\fB-b\fR\fR
.ad
.RS 6n
.rt
使转换的脚本可移植到 UNIX 系统的早期发行版。\fB/usr/lib/getoptcvt\fR 修改 \fIfilename\fR 中的 shell 脚本,使得在执行所得到的 shell 脚本时,由它在运行时确定是调用 \fBgetopts\fR 还是 \fBgetopt\fR。
.RE
.SH 示例
.LP
\fB示例 1 \fR为命令处理参数
.sp
.LP
以下 shell 程序片段显示了如何为可以接受选项 \fB-a\fR 或 \fB-b\fR,以及选项 \fB-o\fR(该选项需要一个选项参数)的命令处理参数:
.sp
.in +2
.nf
while getopts abo: c
do
case $c in
a | b) FLAG=$c;;
o) OARG=$OPTARG;;
\e?) echo $USAGE
exit 2;;
esac
done
shift `expr $OPTIND \(mi 1`
.fi
.in -2
.LP
\fB示例 2 \fR等效的代码表达式
.sp
.LP
此代码将下列各个输入视为等效的:
.sp
.in +2
.nf
\fBcmd -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\fR
.fi
.in -2
.sp
.SH 环境变量
.sp
.LP
有关影响 \fBgetopts\fR 执行的环境变量 \fBLC_CTYPE\fR、\fBLC_MESSAGES\fR 和 \fBNLSPATH\fR 的说明,请参见 \fBenviron\fR(5)。
.sp
.ne 2
.mk
.na
\fB\fB OPTIND\fR \fR
.ad
.RS 12n
.rt
\fBgetoptcvt\fR 将该变量用作要处理的下一个参数的索引。
.RE
.sp
.ne 2
.mk
.na
\fB\fBOPTARG\fR \fR
.ad
.RS 12n
.rt
如果某个选项使用了参数,\fBgetoptcvt\fR 将使用该变量来存储参数。
.RE
.SH 退出状态
.sp
.LP
将返回以下退出值:
.sp
.ne 2
.mk
.na
\fB\fB0\fR\fR
.ad
.RS 7n
.rt
找到了一个选项,可能是也可能不是由 \fIoptstring\fR 指定的。
.RE
.sp
.ne 2
.mk
.na
\fB\fB>0\fR \fR
.ad
.RS 7n
.rt
遇到选项的结尾,或发生错误。
.RE
.SH 属性
.sp
.LP
有关下列属性的说明,请参见 \fBattributes\fR(5):
.sp
.sp
.TS
tab() box;
cw(2.75i) |cw(2.75i)
lw(2.75i) |lw(2.75i)
.
属性类型属性值
_
可用性system/core-os
CSIenabled(已启用)
.TE
.SH 另请参见
.sp
.LP
\fBIntro\fR(1)、\fBgetopts\fR(1)、\fBsh\fR(1)、\fBshell_builtins\fR(1)、\fBgetopt\fR(3C)、\fBattributes\fR(5)
.SH 诊断
.sp
.LP
如果 \fBgetopts\fR 遇到不包括在 \fIoptstring\fR 中的选项字母,将会在标准错误上输出一条错误消息。
.SH 附注
.sp
.LP
尽管在当前实现中,允许放宽以下命令语法规则(请参见 \fBIntro\fR(1)),但也不应使用这些语法规则,因为系统的将来发行版可能不支持它们。如上面的“示例”部分所示,\fB-a\fR 和 \fB-b\fR 均为选项,选项 \fB-o\fR 需要一个选项参数。以下示例违反了规则 5:具有选项参数的选项不得与其他选项组合在一起:
.sp
.in +2
.nf
example% \fBcmd -aboxxx filename\fR
.fi
.in -2
.sp
.sp
.LP
以下示例违反了规则 6:在接受选项参数的选项后面必须有空格:
.sp
.in +2
.nf
example% \fBcmd -ab oxxx filename\fR
.fi
.in -2
.sp
.sp
.LP
更改 shell 变量 \fBOPTIND\fR 的值或解析不同的参数集合可能会导致意外结果。