在 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 退出。
我一直在搜索,但我有一个关于 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 退出。