getopt - вывести значение по умолчанию, если аргумент не указан

getopt - вывести значение по умолчанию, если аргумент не указан

Я следую этому руководству по использованиюgetopt.

#!/bin/bash
ALPHA=test
BETA=test
CHARLIE=test
DELTA=test

usage()
{
  echo "Usage: alphabet [ -a | --alpha ] [ -b | --beta ]
                        [ -c | --charlie CHARLIE ] 
                        [ -d | --delta   DELTA   ] filename(s)"
  exit 2
}

PARSED_ARGUMENTS=$(getopt -a -n alphabet -o a:b:c:d: --long alpha:,bravo:,charlie:,delta: -- "$@")
VALID_ARGUMENTS=$?
if [ "$VALID_ARGUMENTS" != "0" ]; then
  usage
fi

 eval set -- "$PARSED_ARGUMENTS"
while :
do
  case "$1" in
    -a | --alpha)   ALPHA="$2"      ; shift 2   ;;
    -b | --beta)    BETA="$2"    ; shift  2 ;;
    -c | --charlie) CHARLIE="$2" ; shift 2 ;;
    -d | --delta)   DELTA="$2"   ; shift 2 ;;
     --) shift; break ;;
     *) echo "Unexpected option: $1 - this should not happen."
       usage ;;
  esac
done

echo "ALPHA   : $ALPHA"
echo "BETA    : $BETA "
echo "CHARLIE : $CHARLIE"
echo "DELTA   : $DELTA"
echo "Parameters remaining are: $@"

Итак, все аргументы являются обязательными. Если мы не указали аргумент, то будет возвращено значение по умолчанию (которое я назначил с самого начала).

БЫВШИЙ:

./script
PARSED_ARGUMENTS is  --
ALPHA   : unset
BETA    : unset
CHARLIE : unset
DELTA   : unset

Пример2

./script -a aaa
PARSED_ARGUMENTS is  -a 'aaa' --
ALPHA   : aaa
BETA    : unset
CHARLIE : unset
DELTA   : unset
Parameters remaining are:

Пока что всё идеально.

Проблема:

Теперь, если я вызываю аргумент, но не передаю никаких значений при запуске скрипта, то возникает ошибка.

./script -a
alphabet: option requires an argument -- 'a'
Usage: alphabet [ -a | --alpha ] [ -b | --beta ]
                        [ -c | --charlie CHARLIE ]
                        [ -d | --delta   DELTA   ] filename(s)

В этом случае, если я не указал значения, -aто следует взять значение по умолчанию (с самого начала).

решение1

Вы не можете просто указать «-a» и оставить его без аргумента, вместо этого вы можете вообще не упоминать «-a», а внутри скрипта, если опция -a не указана, вы можете назначить значение по умолчанию, как показано ниже:

if [[ -z $ALPHA ]]
then
ALPHA="defaultvalue"
fi

Связанный контент