在bash脚本中使用getopts时,如何抛出仅使用一个选项标志的错误?

在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

我一直在搜索,但我有一个关于bash脚本和getopts的问题

我正在尝试使用getops构建一个防愚脚本。当用户使用该选项时,如果我添加多个选项,它将抛出一个错误,那么最好的方法是什么

例如:

script.sh-a>这将运行选项a


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下面添加代码并检查你的脚本..谢谢查看。