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

时间:2015-11-27 05:33:24

标签: bash shell getopts

我一直在搜索,但我对bash脚本和getopts有疑问。

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

示例:

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

script.sh -aaaaa>一个错误应该抛出一些东西说,只允许一个标志。

1 个答案:

答案 0 :(得分:0)

以下代码使用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退出。