2013-08-24 24 views
2

我試圖編寫代碼來檢查任何參數(位置N)是否等於「--check」並且如果它是真的,則需要下一個參數(位置N + 1)存在。否則,退出。當第N個參數等於「--check」時,如何確保存在N + 1參數

我該如何做到這一點?

我試圖某事像這樣,但它似乎沒有工作: 我重申我的論點,如果「--check」則發現設置標誌爲1,這將觸發nextArg另一個條件檢查:

FLAG=0 
for i in "[email protected]"; do  

    if [ $FLAG == 1 ] ; then 
      nextARG="$i" 
      FLAG=0 
    fi 
    if [ "$i" == "--check" ] ; then 
      FLAG=1 
    fi 
done 

if [ ! -e $nextARG ] ; then 

    echo "nextARG not found" 
    exit 0 
fi 

回答

1

你可以使用這樣的表單。在解析參數時,我將它用作一般方法。我發現它比使用getopts更容易混淆。

while [[ $# -gt 0 ]]; do 
    case "$1" in 
    --option) 
     # do something 
     ;; 
    --option-with-arg) 
     case "$2" in) 
     check_pattern) 
      # valid 
      my_opt_arg=$2 
      ;; 
     *) 
      # invalid 
      echo "Invalid argument to $1: $2" 
      exit 1 
      ;; 
     esac 
     # Or 
     if [[ $# -ge 2 && $2 == check_pattern ]]; then 
      my_opt_arg=$2 
     else 
      echo "Invalid argument to $1: $2" 
      exit 1 
     fi 
     shift 
     ;; 
    *) 
     # If we don't have default argument types like files. If that is the case we could do other checks as well. 
     echo "Invalid argument: $1" 
     # Or 
     case $1 in 
     /*) 
      # It's a file. 
      FILES+=("$1") 
      ;; 
     *) 
      # Invalid. 
      echo "Invalid argument: $1" 
      exit 1 
      ;; 
     esac 
    esac 
    shift 
done 
2

我會去getopts。該鏈接顯示了一個示例,您可以檢查缺少的參數。

+1

這是正確的做法!沒有必要重新發明輪子 –