如果传递两个特定参数,如何退出getopt?

时间:2015-11-02 21:16:18

标签: bash getopt getopts

我想要做的是,如果一次传递两个特定参数,那么脚本将退出并执行HELP函数。

while getopts ":H:D:S:h:" arg; do
case "${arg}" in
H) HOUR=${OPTARG};;
D) DAY=${OPTARG};;
h) HELP;;
\?) #unrecognized option - show help
    HELP;;

因此,如果出现H和D的脚本,我想终止脚本运行并要求用户再次键入它。

显然我可以使用类似的东西:

if [[ -z "$HOUR"  || -z "$DAY"  ]]
  then
    HELP

但是想知道是否有更好的选择来做那样的事情。干杯!

1 个答案:

答案 0 :(得分:2)

case并未对互斥选项提供任何明确支持。我建议在case $arg of -H) if [[ -n $DAY ]]; then printf '-D already detected\n' exit 1 else HOUR=$OPTARG fi ;; -D) if [[ -n $HOUR ]]; then printf '-H already detected\n' exit 1 else DAY=$OPTARG fi ;; -h) HELP ;; *) HELP ;; esac 声明中删除它:

{{1}}