我正在创建一个接受选项的脚本,其中两个是-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
如何更改代码才能执行此操作?
答案 0 :(得分:1)
在解析所有选项后(while
循环之后),您可以执行
if ($sflag && ! $eflag) || (! $sflag && $eflag); then
echo "Cannot specify -s without -e or vice versa" >&2
exit 1
fi
我正在利用true
和false
是内置命令返回预期状态的事实。
也可以在不使用子shell的情况下编写它,但它有点吵闹:
if { $sflag && ! $eflag; } || { ! $sflag && $eflag; }; then