2015-11-02 21 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