在bash脚本中使用getopts时,如何抛出仅使用一个选项标志的错误?
我一直在搜索,但我有一个关于bash脚本和getopts的问题 我正在尝试使用getops构建一个防愚脚本。当用户使用该选项时,如果我添加多个选项,它将抛出一个错误,那么最好的方法是什么 例如: script.sh-a>这将运行选项a在bash脚本中使用getopts时,如何抛出仅使用一个选项标志的错误?,bash,shell,getopts,Bash,Shell,Getopts,我一直在搜索,但我有一个关于bash脚本和getopts的问题 我正在尝试使用getops构建一个防愚脚本。当用户使用该选项时,如果我添加多个选项,它将抛出一个错误,那么最好的方法是什么 例如: script.sh-a>这将运行选项a script.sh-aaaaa>一个erro应该抛出这样的内容:只允许使用一个标志。下面的代码使用getopts解析选项。当看到选项a时,它将变量a设置为值Yes。但是,在执行此操作之前,它会检查a是否已经有值。如果是,则打印一个错误 #!/bin/sh die
script.sh-aaaaa>一个erro应该抛出这样的内容:只允许使用一个标志。下面的代码使用
getopts
解析选项。当看到选项a
时,它将变量a
设置为值Yes
。但是,在执行此操作之前,它会检查a
是否已经有值。如果是,则打印一个错误
#!/bin/sh
die () {
echo "ERROR: $*. Aborting." >&2
exit 1
}
a=
while getopts a arg ; do case $arg in
a)
[ "$a" ] && die "Option a already specified"
a=Yes
;;
:) die "${0##*/}: Must supply an argument to $OPTARG." ;;
\?) die "Invalid option. Abort" ;;
esac
done
shift $(($OPTIND - 1))
echo "Doing something useful now..."
守则的关键部分是:
[ "$a" ] && die "Option a already specified"
构造[“$a”]
测试$a
的值。如果不为空,则测试返回true,这将触发&&
操作符运行die
命令。如果为空,则[“$a”]
返回false,并且die
命令不运行
die
是一个函数:它打印一条消息并退出,错误代码为1。当您看到该选项时设置一个标志,除非已经设置了该标志,在这种情况下您会抛出错误。一般来说,如果您表明已做出努力,Stackoverflow会对您更友好。所以,编辑你的答案并添加你当前的代码,不管是否有效。对不起,我是新加入论坛的…将在John下面添加代码并检查你的脚本..谢谢查看。