如何仅在shell脚本中强制使用一个标志?

问题描述 投票:0回答:1

我目前有一个使用短标记-M-m-b的脚本。我只想使用一个参数,所以我只是在匹配标志上将其中断。我想更改它,以便在使用多个标志的情况下返回非零代码,并且我想支持长标志(--major--minor--bug)。如何修改我现在使用的代码块来实现这一目标?

while getopts ":Mmb" increment; do
  case "${increment}" in
    M)
      result=1
      break
      ;;
    m)
      result=2
      break
      ;;
    b)
      result=3
      break
      ;;
  esac
done
bash shell getopts
1个回答
0
投票

也许:

has_M=0
has_m=0
has_b=0

while getopts ":Mmb" increment; do
  case "${increment}" in
    M) has_M=1 ;;
    m) has_m=1 ;;
    b) has_b=1 ;;
  esac
done
shift $((OPTIND - 1))

if (( has_M + has_m + has_b > 1 )); then
    echo "only one of -M -m -b is allowed" >&2
    exit 1
fi
© www.soinside.com 2019 - 2024. All rights reserved.