getopts пустой аргумент и значение по умолчанию - PullRequest
0 голосов
/ 14 декабря 2018

мое требование действительно простое, я просто хочу проверить, является ли аргумент getopts пустым или нет.Я запускаю свой сценарий, используя jenkins, и мне нужно проверить, что если предоставленное значение пустое, то установить значение по умолчанию, в противном случае использовать предоставленное значение: enter image description here

и передать аргументы вСценарий оболочки, подобный следующему:

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

фрагмент из сценария оболочки:

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}"

, когда я запускаю эту работу, он не дает мне желаемого результата: enter image description here

Как мне добиться этого с помощью getopts, чтобы проверить, является ли аргумент пустым, чем присвоить какое-либо значение по умолчанию для выполнения какой-либо операции, в противном случае используйте предоставленное значение аргумента.

1 Ответ

0 голосов
/ 14 декабря 2018

Это не совсем в getopts, но вы можете сделать так, чтобы ваша оболочка расширяла переменную по-разному, если она пуста или нет, например,

    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.
...