getopts检查互斥参数

时间:2014-02-12 07:13:18

标签: bash getopts

我有一个简单的脚本(下面),它有互斥的参数。

脚本的参数应为./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

1 个答案:

答案 0 :(得分:10)

我可以想到两种方式:

接受-t <argument>选项,其中参数可以是desktopminimal

所以你的脚本将被称为:

./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