拒绝使用多个 getopts 参数

拒绝使用多个 getopts 参数

我正在尝试找出一种方法来拒绝在某种情况下使用多个 getopts args。假设我们有这样的东西:

while getopts "a:b:c:def" variable; do
case $variable in
a)a=$OPTARG
b)b=$OPTARG
c)c=$OPTARG
d)MODE=SMTH
e)MODE=SMTH2
f)MODE=SMTH3
esac
done

我想做的是拒绝使用多个 MODE arg (def) 并显示一条消息告诉用户这一点。类似的东西:

./script.sh -a ajhsd -b kjdhas -c daskjdha -d -e -f

执行检查是否使用了多个 MODE arg(def) 如果使用多个,则会显示一条错误消息。我尝试使用简单的输入检查 if 语句,但惨败。它总是遍历所有三个参数并获取最后传递的参数参数,甚至无需进入多个参数检查。有点奇怪。做到这一点应该很容易。应该有...

答案1

您需要初始化为,和MODE以外的某个值。然后,检查MODE是否为初始值。如果没有,则抛出错误消息,然后退出。出错后必须退出,否则脚本将继续运行。下面的脚本的修改版本应该可以帮助您入门。SMTHSMTH2SMTH3

MODE=0
EMSG="More than one of -d, -e, -f has been specified"
while getopts "a:b:c:def" variable; do
case $variable in
a) a=$OPTARG ;;
b) b=$OPTARG ;;
c) c=$OPTARG ;;
d) if [ $MODE = 0 ] ; then MODE=SMTH  ; else  echo $EMSG  ; exit 1 ; fi ;;
e) if [ $MODE = 0 ] ; then MODE=SMTH2 ; else  echo $EMSG  ; exit 1 ; fi ;;
f) if [ $MODE = 0 ] ; then MODE=SMTH3 ; else  echo $EMSG  ; exit 1 ; fi ;;
esac
done

相关内容