Linux
確保只有 1 個強制參數傳遞給腳本
我正在編寫一個 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