【问题标题】:How to throw error to only use one option flag when using getopts in bash script?在 bash 脚本中使用 getopts 时如何抛出错误以仅使用一个选项标志?
【发布时间】:2015-11-27 05:33:23
【问题描述】:

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

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

例子:

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

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

【问题讨论】:

  • 看到选项时设置一个标志,除非标志已经设置,在这种情况下你会抛出错误。
  • 一般来说,如果你表明你已经付出了努力,Stackoverflow 会对你更友善。因此,编辑您的答案并添加您当前的代码,无论是否有效。
  • 对不起,我是论坛的新手...将添加代码并在 John 下面检查您的脚本..感谢您的关注。

标签: bash shell getopts


【解决方案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 的值。如果它非空,则测试返回 true,这会触发 && 运算符运行 die 命令。如果为空,则[ "$a" ] 返回 false,die 命令运行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2015-11-05
    • 2019-02-04
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多