Я пытаюсь написать простой скрипт bash, который будет выполняться следующим образом.
$ ./export.sh -n <my-file-name> -a <my-api-key>
Я использую это как способ передать некоторые аргументы во время сборки в проекте Go.
Очень простая версия скрипта:
#!/bin/bash
while getopts n:a option
do
case "${option}"
in
n) FILENAME=${OPTARG};;
a) APIKEY=${OPTARG};;
esac
done
if [ -z "$FILENAME" ]
then
FILENAME=downloader
fi
if [ -z "$APIKEY" ]
then
echo "[ERROR] Missing API key"
exit 1
fi
cd src && go build -o ../build/${FILENAME}.exe downloader -ldflags "-X api.APIServiceKey="${APIKEY}
Если FILENAME
не существует, я указываю значение по умолчанию, однако, если APIKEY
отсутствует, я хотел бы существовать и показывать сообщение.
Однако запуск скрипта со всеми аргументами выдает ошибку, как будто APIKEY
отсутствует.
Вы пропустили двоеточие в вызове getopts
. Поскольку вы ожидаете аргумент -a
, после него в строке опций должно быть двоеточие: while getopts n:a: option
Цитирование справочной страницы getopts:
When the option requires an option-argument, the getopts utility shall place it in the shell variable OPTARG. [...] If a character is followed by a <colon>, the option shall be expected to have an argument which should be supplied as a separate argument.
«... однако, если APIKEY отсутствует, я хотел бы существовать и ...»: я могу подтвердить, что вы действительно существуете ;-)