我怎样才能让一个选项需要另一个选项?

How can I make an option require another option?

我正在制作一个接受选项的脚本,其中两个是 -s-e-s 需要一个开始日期,-e 需要一个结束日期,但我想做到这一点,所以一个不能没有另一个使用。换句话说,如果我使用 -s 选项,则还需要 -e 选项,反之亦然。

到目前为止,这是我的代码

#!/bin/bash

gflag=false
uflag=false
sflag=false
eflag=false
rflag=false
nflag=false
tflag=false

while getopts g:u:s:e:rnt opt; do
  case "$opt" in
    g)
      gflag=true
      groupParam=$OPTARG
      echo "-g was triggered, Parameter: $OPTARG" >&2
      ;;
    u)
      uflag=true
      userParam=$OPTARG
      echo "-u was triggered, Parameter: $OPTARG" >&2
      ;;
    s)
      sflag=true
      startParam=$OPTARG
      echo "-s was triggered, Parameter: $OPTARG" >&2
      ;;
    e)
      eflag=true
      endParam=$OPTARG
      echo "-e was triggered, Parameter: $OPTARG" >&2
      ;;
    r)
      rflag=true
      echo "-r was triggered" >&2
      ;;
    n)
      nflag=true
      echo "-n was triggered" >&2
      ;;
    t)
      tflag=true
      echo "-t was triggered" >&2
      ;;
  esac
done

如何更改我的代码才能执行此操作?

解析所有选项后(在while循环之后),你可以做

if ($sflag && ! $eflag) || (! $sflag && $eflag); then
    echo "Cannot specify -s without -e or vice versa" >&2
    exit 1
fi

我正在利用 truefalse 是 return 预期状态的内置命令这一事实。

也可以在不使用子 shell 的情况下写这个,但是有点吵:

if { $sflag && ! $eflag; } || { ! $sflag && $eflag; }; then