Проверка существования входного аргумента в 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
И так можно делать с любым аргументом или переменной.
Как выводить команды оболочки по мере их выполнения
Назначение значений по умолчанию для переменных оболочки одной командой в bash
Как указать приватный SSH-ключ для выполнения команды shell в Git?
Как сделать паузу в shell-скрипте на одну секунду перед продолжением?
Как использовать 'grep' для непрерывного потока?