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

How to throw error to only use one option flag when using getopts in bash script?

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

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

示例:

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

script.sh -aaaaa > 错误应该抛出一些内容,只允许 1 个标志。

下面的代码使用 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 的值。如果它非空,则测试 returns 为真,这会触发 && 运算符以 运行 die 命令。如果为空,那么[ "$a" ] returns false 并且die命令是not 运行.

die 是一个函数:它打印一条消息并以错误代码 1 退出。