Проверка существования входного аргумента в Bash-скрипте
Я пытаюсь проверить наличие входного аргумента в моем скрипте. У меня есть следующий код:
if [ "$1" -gt "-1" ]
then echo hi
fi
Однако я получаю следующую ошибку:
[: : integer expression expected
Как правильно проверить, существует ли входной аргумент перед его использованием?
5 ответ(ов)
Вы можете использовать следующий код для проверки, были ли переданы аргументы вашему скрипту:
if [ $# -eq 0 ]
then
echo "Аргументы не переданы"
fi
Переменная $# указывает на количество аргументов, переданных скрипту.
Также, если вам нужно проверить, является ли конкретный аргумент пустой строкой, вы можете использовать следующий код:
if [ -z "$1" ]
then
echo "Аргумент не предоставлен"
fi
Флаг -z проверяет, является ли значение "$1" пустой строкой. Если это так, выполняется тело условия.
В данном случае лучше всего продемонстрировать это следующим образом:
if [[ $# -eq 0 ]] ; then
echo 'недостаточно аргументов, пожалуйста, укажите как минимум один.'
exit 1
fi
Обычно вам нужно завершить выполнение скрипта, если передано слишком мало аргументов. Это гарантирует, что ваш скрипт не продолжит выполнение, когда он не получает необходимую информацию для работы.
В некоторых случаях необходимо проверить, передал ли пользователь аргумент скрипту, и, если не передал, использовать значение по умолчанию. Например, в следующем скрипте:
scale=${2:-1}
emulator @$1 -scale $scale
Здесь, если пользователь не передал scale в качестве второго параметра, я запускаю эмулятор Android с -scale 1 по умолчанию. ${varname:-word} — это оператор расширения. Существуют и другие операторы расширения:
${varname:=word}— устанавливает не определённуюvarname, вместо того чтобы вернуть значениеword;${varname:?message}— возвращаетvarname, если она определена и не пуста, или выводитmessageи завершает выполнение скрипта (похожим образом на первый пример);${varname:+word}— возвращаетwordтолько еслиvarnameопределена и не пуста; в противном случае возвращает пустое значение.
Эти операторы могут быть очень полезны для управления параметрами в ваших скриптах.
Попробуйте следующий скрипт на Bash:
#!/bin/bash
if [ "$#" -eq "0" ]; then
echo "Аргументы не переданы"
else
echo "Привет, мир"
fi
Этот скрипт проверяет, были ли переданы аргументы при его запуске. Если аргументы отсутствуют, он выводит сообщение "Аргументы не переданы". В противном случае он выводит "Привет, мир".
Вы можете проверить, является ли ваша строка пустой (null), с помощью следующего кода:
if [ "$1" ]; then
echo yes
else
echo no
fi
Таким образом, если вы ожидаете, что количество аргументов будет определенным, вы можете проверить последний аргумент:
if [ "$3" ]; then
echo has args correct or not
else
echo fixme
fi
И так можно делать с любым аргументом или переменной.
Как выводить команды оболочки по мере их выполнения
Как указать приватный SSH-ключ для выполнения команды shell в Git?
Как узнать, в какой интерактивной оболочке я нахожусь (командная строка)
Расширение переменных внутри одинарных кавычек в команде Bash
Сравнение null и пустой строки в Bash