12

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

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

1 回答 1

14

我可以想到两种方法:

接受一个选项,比如-t <argument>Where 参数可以是desktopminimal

所以你的脚本将被称为:

./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
于 2014-02-12T07:28:51.850 回答