如何在 POSIX shell 中使用getopts
(手册页)检查传递的选项?(报告、计数并丢弃。)
我的想法是这样的:我的许多脚本不采用任何选项(甚至不是-h
为了帮助,我直接过渡到)help
。因此,如果给出任何数量的选项(开关),我想对它们进行计数,报告它们,然后简单地丢弃他们(不要对他们做任何操作)。
让我们包括所有0-9
, 以及下层和上层a-z
( A-Z
)。
更新:我的许多脚本甚至不将文件作为参数,这个脚本就是这种情况。
使用帮助如下所示:
usage ()
{
cat << EOF
MPV video player subtitles enable/disable toggling
--------------------------------------------------
on Enable subtitles toggling in MPV.
off Disable subtitles toggling in MPV.
help Print this help message.
version Print the script version.
EOF
}
如果您的脚本不采用任何选项,但您想检查(错误地)传递了哪些选项并自行处理错误,则可以在选项规范中
getopts
添加:
在$OPTARG
. 引用该实用程序的 POSIX 规范getopts
(强调我的):所以你可以这样写:
例子:
但是不带任何选项(但仍处理 )的脚本
--
通常只是:并且在出现第一个错误时仍然以失败退出状态退出,这是最明智的做法。
我们
getopts
通过省略前缀来输出有关无效选项本身的错误消息:
。当然,在选项处理之后,您可以根据需要验证其余参数。例如,如果您的脚本也不接受非选项参数,则在
shift
调用后:实际上,它只能被称为
that-script
orthat-script --
。尽管您也可以跳过getopts
并拒绝任何参数,无论它们是选项、选项分隔符还是非选项参数。或对于
Usage: cmd [<type> <length> <value> [<type> <length> <value>]...]
:等等。