我有一个简单的脚本(下面),它有互斥的参数。
脚本的参数应该是./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>
可以desktop
或minimal
参数的选项
因此,您的脚本将称为:
./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