Linux

確保只有 1 個強制參數傳遞給腳本

  • September 4, 2021

我正在編寫一個 shell 腳本和新的 getopts 參數解析。我擁有的是 1 個可選參數和 2 個強制參數,我想要做的是確保只傳遞一個強制參數。現在存在一個基本的驗證,但它實際上是無用的長期。我查看了使用 if 條件的其他範例,但也失敗了。在案例中使用標誌並通過檢查各個狀態來呼叫函式也列印了所有內容。我想要的是確保只使用 1 個強制參數,並在超過 1 個傳遞時拋出錯誤。現在,所有選項都按指定的順序工作。這是程式碼

#!/bin/bash

USAGE="Usage : $0 [-r N] (-a|-b)"

#Prompts when there are no arguments passed
if [ "$#" -le 0 ]; then
   echo $USAGE
   exit 2
fi

#the option parsing
while getopts ':n:ab' option
do
   case $option in
       r)
           numlim=$OPTARG
           ;;
       a)
           task1
           ;;

       b)
           task2
           ;;

       *)
           echo "Unknown Param"
           echo $USAGE
           ;;
   esac
done

我想要的是如何以指定方式設計程式碼的提示。

設置一個變數來決定在getopts循環中執行哪個任務,然後手動檢查是否只選擇了一個任務。您可以通過各種方式做到這一點,例如:

#!/bin/sh
task=
set_task() {
   if [ -n "$task" ]; then
       echo "only one of -a and -b may be used" >&2
       exit 1
   fi
   task=$1
}
while getopts ':n:ab' option; do
   case $option in
       a)  set_task a;; 
       b)  set_task b;;
       *)  echo "unknown option" >&2
           exit 1;;
   esac
done
if [ "$task" = a ]; then
   echo do task a...
elif [ "$task" = b ]; then
   echo do task b...
else
   echo "invalid or unspecified task" >&2
   exit 1
fi

引用自:https://unix.stackexchange.com/questions/667648