gpt4 book ai didi

bash - getopts 检查互斥参数

转载 作者:行者123 更新时间:2023-11-29 08:54:44 25 4
gpt4 key购买 nike

我有一个具有互斥参数的简单脚本(如下)。

脚本的参数应该是 ./scriptname.sh -m|-d [-n],但是,用户可以使用 ./scriptname.sh 运行脚本 - m -d 这是错误的。

问题:我如何强制用户只提供一个互斥参数?

#!/bin/sh

usage() {
cat <<EOF
Usage: $0 -m|-d [-n]
where:
-m create minimal box
-d create desktop box
-n perform headless build
EOF
exit 0
}

headless=
buildtype=

while getopts 'mdnh' flag; do
case "$flag" in
m) buildtype='minimal' ;;
d) buildtype='desktop' ;;
n) headless=1 ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done

[ -n "$buildtype" ] && usage

最佳答案

我可以想到两种方法:

接受像 -t <argument> 这样的选项其中参数可以是 desktopminimal

因此您的脚本将被称为:

./scriptname.sh -t desktop -n

./scriptname.sh -t minimal -n

另一种选择是在您的脚本中强制执行验证,如下所示:

headless=
buildtype=

while getopts 'mdnh' flag; do
case "$flag" in
m) [ -n "$buildtype" ] && usage || buildtype='minimal' ;;
d) [ -n "$buildtype" ] && usage || buildtype='desktop' ;;
n) headless=1 ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done

关于bash - getopts 检查互斥参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721070/

25 4 0