我怎样才能让一个选项需要另一个选项?
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
我正在利用 true
和 false
是 return 预期状态的内置命令这一事实。
也可以在不使用子 shell 的情况下写这个,但是有点吵:
if { $sflag && ! $eflag; } || { ! $sflag && $eflag; }; then
我正在制作一个接受选项的脚本,其中两个是 -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
我正在利用 true
和 false
是 return 预期状态的内置命令这一事实。
也可以在不使用子 shell 的情况下写这个,但是有点吵:
if { $sflag && ! $eflag; } || { ! $sflag && $eflag; }; then