2015-11-02 50 views
0

我想要做的是,如果两个特定的参数一次传递,那么脚本将退出并执行帮助功能。如何通过两个特定参数退出getopt?

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 

但如果有更好的选择,做这样的事情不知道。干杯!

回答

2

getopts没有对互斥选项提供任何明确的支持。我建议赶在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 
+0

工作!谢谢! – madbitloman