【发布时间】:2014-03-10 08:57:45
【问题描述】:
我有一个包含互斥参数的简单脚本(如下)。
脚本的参数应该是./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
【问题讨论】:
-
其他人一直在问这个...等一下,我会找到它...啊,它在那里...How to use mutually exclusive flags in your shell — stuck with
getopts?它甚至在相关问题列表中。你也可以看看Usinggetoptsin bash shell script to get long and short command line options。这涵盖了很多领域。 -
我确实在谷歌上搜索并扫描了推荐的问题,但认为这些链接不相关。希望我的问题标题能帮助那些在搜索方面也不足的人(比如我):)