我有一个简单的脚本(下面),它有互斥的参数。
脚本的参数应为./scriptname.sh -m|-d [-n]
,但是,用户可以使用./scriptname.sh -m -d
运行脚本,这是错误的。
问题:如何强制用户只提供其中一个互斥参数?
#!/bin/bash
progname=$0
function usage () {
cat <<EOF
Usage: $progname -m|-d [-n]
where:
-m create minimal box
-d create desktop box
-n perform headless build
EOF
exit 0
}
headless='false'
buildtype=''
while getopts 'mdnh' flag; do
case "${flag}" in
m) buildtype='minimal' ;;
d) buildtype='desktop' ;;
n) headless='true' ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done
if [ "$buildtype" == "" ];
then
usage
exit
fi
答案 0 :(得分:10)
我可以想到两种方式:
接受-t <argument>
选项,其中参数可以是desktop
或minimal
所以你的脚本将被称为:
./scriptname.sh -t desktop -n
OR
./scriptname.sh -t minimal -n
另一种选择是在脚本中强制执行验证:
headless='false'
buildtype=''
while getopts 'mdnh' flag; do
case "${flag}" in
m) [[ -n "$buildtype" ]] && usage || buildtype='minimal' ;;
d) [[ -n "$buildtype" ]] && usage || buildtype='desktop' ;;
n) headless='true' ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done