getopts: getopts 选项字符串 名称 [参数]
解析选项参数。
Getopts 被 shell 过程用于解析可定位的参数作为选项。
OPTSTRING 字符串包含待识别的选项字母;如果一个字母后面跟
着分号,则该选项需要一个参数,而该参数应用空格与选项分开。
每次启动时,getopts 会将下一个选项放到 shell 变量 $name
中,如果 name 变量不存在则先将其初始化,而下一个待处
理的参数序号放入 shell 变量 OPTIND 中。OPTIND 变量在每
次 shell 或者 shell 脚本启动时都被初始化为1。当一个选项要
求有一个参数时,getopts 将参数放入 shell 变量 OPTARG
中。
getopts 有两种报告错误的方法。如果 OPTSTRING 变量的第
一个字符是冒号,getopts 使用沉默错误报告。在这种模式
下,不会打印错误消息。如果看到了一个无效的选项,
getopts 将找到的选项字符放至 OPTARG 变量中。如果一个必
须的选项没有找到,getopts 放一个 ':' 到 NAME 变量中并且设
置 OPTARG 变量为找到的选项字符。如果 getopts 不在沉默模
式中,并且遇到了一个无效的选项,getopts 放置一个 '?' 到 NAME
变量中并且取消设定 OPTARG变量。如果必须的选项没有找到,
一个'?'会被放入 NAME变量中,OPTARG 将被取消设定,并且会
打印一个诊断信息。
如果 shell 变量 OPTERR 的值为0,getopts 禁用
错误信息的打印,即使 OPTSTRING 变量的第一个字符不是一
个冒号。OPTERR 的默认值为1.
Getopts 通常解析可定位的参数($0 - $9),不过如果提供了
更多的参数,它们反而会被解析。
退出状态:
如果一个选项被找到则返回成功;如果遇到了选项的结尾或者
有错误发生则返回失败。
getopts 命令
用途
处理命令行参数,并校验有效选项。
语法
getopts 选项字符串 名称 [ 参数 ...]
描述
getopts 命令是 Korn\/POSIX shell 的内置命令,用来从参数列表检索选项以及选项参数。选项由一个+(加号)或者是由一个-(减号)后跟一个字符开始。一个既不是以+,也不是以-开始的选项结束选项字符串。每次调用 getopts 命令时,它将下一个选项的值放置在名称内,并将下一个要处理的参数的索引置于 shell 变量 OPTIND 中。一旦调用了shell , OPTIND 将初始化为1。当选项以 +开头,则+ 将预先设为名称中的值。
如果选项字符串中的字符后面带有“:”(冒号),则预期此选项将带有参数。当选项需要选项参数时,getopts 命令就将其置于变量 OPTARG 中。
当查找到选项字符串所不包含的选项字符,或者查找到的选项没有所需的选项参数时:
如果选项字符串不以:(冒号)开头,名称 将会被设置为 ?(问号)字符,OPTARG. 将被取消设置,并且诊断消息将被写入到标准错误中。 这种情况被认为是在将参数传递给所调用的应用程序的过程中所检测到的错误,而不是在处理 getopts 命令的过程中所发生的错误;如上所述,写入诊断消息,但退出状态将变为零。
如果选项字符串以 :(冒号)开头,名称 将被设为 ? (问号)字符,这是对未知的选项来说的,或者为缺少的所需选项设为:(冒号)字符,OPTARG 将被设置为已查找到的选项字符,并且 标准错误中将不写入任何输出。 以下任何字符都可以识别选项结尾:特殊选项- -,查找到不以-,或者+为开头的参数,或者遇到错误。
当遇到选项结尾时:
getopts 命令将退出运行,并且返回值大于零,OPTARG 将被设置为第一个非选项参数索引,在这种情况下,如果第一个 - - 参数之前未出现其它非选项参数,将认为它是选项参数,或者如果没有非选项参数,设置为值 $#+1,名称将被设置为? (问号)字符, 参数
选项字符串 包含 getopts 命令识别的选项字符串。如果字符后带有冒号,则预期选项将带有参数,应该以单独参数的形式提供此参数。可以用空格将选项与参数分隔开。如果选项字符是未知的或者选项参数丢失,则选项字符串中的第一个字符将决定 getopts 命令的行为。
注意:应用程序不应该将问号和冒号字符作为选项字符。使用其它非字母数字的字符会产生不明的结果。 名称 由 getopts 命令对查找到的选项字符设置。
参数 ... 一个或多个被空格分隔的字符串,由 getopts 命令校验是否是合法选项。如果省略参数 ,就使用位置参数。有关位置参数的更多信息,请参见 Korn Shell 中的 参数替换。
注意: 一般来说,不必将参数指定为 getopts 命令的一部分,但在进行脚本调试时可能会有所帮助。
退出状态
此命令返回下列出口值:
0 查找到由选项字符串指定的或未指定的选项。
<0 遇到选项结束或发生错误。
1.getopts 允许把选项堆叠在一起(如 -ms)
2.如要带参数,须在对应选项后加 :(如h后需加参数 h:ms)。此时选项和参数之间至少有一个空白字符分隔,这样的选项不能堆叠。
3.如果在需要参数的选项之后没有找到参数,它就在给定的变量中存入 ? ,并向标准错误中写入错误消息。否则将实际参数写入特殊变量 :OPTARG
4.另外一个特殊变量:OPTIND,反映下一个要处理的参数索引,初值是 1,每次执行 getopts 时都会更新。