簡體   English   中英

getopts 空參數和默認值

[英]getopts empty argument and default value

我的要求非常簡單,我只想檢查getopts參數是否為空。 我正在使用 jenkins 踢我的腳本,需要檢查提供的值是否為空,然后設置默認值,否則使用提供的值: 在此處輸入圖片說明

並將參數傳遞給 shell 腳本,如下所示:

./rds-db-dump.sh -s ${source_instance_id}  -c ${target_instance_class} -i ${source_snapshot_id}

來自shell腳本的片段:

while getopts ":s:c:i:h" opt; do
  case ${opt} in
    s) SOURCE_INSTANCE_ID="${OPTARG}"
    ;;
    c) TARGET_INSTANCE_CLASS="${OPTARG}"
    ;;
    i) SOURCE_SNAPSHOT_ID="${OPTARG}"
    ;;
    h) usage && exit 1
    ;;
    \?) echo "Invalid option -${OPTARG}" >&2
    usage && exit 1
    ;;
  esac
done

echo "SOURCE_SNAPSHOT_ID: ${SOURCE_SNAPSHOT_ID}"
echo "TARGET_INSTANCE_CLASS: ${TARGET_INSTANCE_CLASS}"

當我開始這份工作時,它並沒有給我想要的結果: 在此處輸入圖片說明

我如何使用getopts來檢查參數是否為空,而不是分配一些默認值來執行某些操作,否則使用提供的參數值。

它不是真正在getopts內,但是您可以讓您的shell以不同的方式擴展該變量(如果它為空),例如

    i) SOURCE_SNAPSHOT_ID="${OPTARG:-yourdefaultvalue}"

或者,您可以僅檢查OPTARG是否為空並繼續,或者在整個循環后設置默認值,例如,當且僅當它之前為空時,這兩個值中的任何一個都會設置SOURCE_SNAPSHOT_ID

: ${SOURCE_SNAPSHOT_ID:=yourdefaultvalue}
SOURCE_SNAPSHOT_ID=${SOURCE_SNAPSHOT_ID:-yourdefaultvalue}

有關此類變量用法的更多信息,請參見bash手冊的“參數擴展”(僅引用我所使用的兩個變量):

   ${parameter:-word}
          Use  Default  Values.   If  parameter is unset or null, the expansion of word is substituted.
          Otherwise, the value of parameter is substituted.
   ${parameter:=word}
          Assign Default Values.  If parameter is unset or null, the expansion of word is  assigned  to
          parameter.   The  value  of parameter is then substituted.  Positional parameters and special
          parameters may not be assigned to in this way.

測試一下:

  • 分配一個變量
Z) testarg=$OPTARG
    ;;
  • 測試變量
if [ -z "$testarg" ]; then $(set default value); fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM