20

Проверка существования входного аргумента в Bash-скрипте

8

Я пытаюсь проверить наличие входного аргумента в моем скрипте. У меня есть следующий код:

if [ "$1" -gt "-1" ]
then echo hi
fi

Однако я получаю следующую ошибку:

[: : integer expression expected

Как правильно проверить, существует ли входной аргумент перед его использованием?

5 ответ(ов)

33

Вы можете использовать следующий код для проверки, были ли переданы аргументы вашему скрипту:

if [ $# -eq 0 ]
then
  echo "Аргументы не переданы"
fi

Переменная $# указывает на количество аргументов, переданных скрипту.

Также, если вам нужно проверить, является ли конкретный аргумент пустой строкой, вы можете использовать следующий код:

if [ -z "$1" ]
then
  echo "Аргумент не предоставлен"
fi

Флаг -z проверяет, является ли значение "$1" пустой строкой. Если это так, выполняется тело условия.

5

В данном случае лучше всего продемонстрировать это следующим образом:

if [[ $# -eq 0 ]] ; then
    echo 'недостаточно аргументов, пожалуйста, укажите как минимум один.'
    exit 1
fi

Обычно вам нужно завершить выполнение скрипта, если передано слишком мало аргументов. Это гарантирует, что ваш скрипт не продолжит выполнение, когда он не получает необходимую информацию для работы.

1

В некоторых случаях необходимо проверить, передал ли пользователь аргумент скрипту, и, если не передал, использовать значение по умолчанию. Например, в следующем скрипте:

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 определена и не пуста; в противном случае возвращает пустое значение.

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

0

Попробуйте следующий скрипт на Bash:

#!/bin/bash
if [ "$#" -eq "0" ]; then
    echo "Аргументы не переданы"
else
    echo "Привет, мир"
fi

Этот скрипт проверяет, были ли переданы аргументы при его запуске. Если аргументы отсутствуют, он выводит сообщение "Аргументы не переданы". В противном случае он выводит "Привет, мир".

0

Вы можете проверить, является ли ваша строка пустой (null), с помощью следующего кода:

if [ "$1" ]; then
  echo yes
else
  echo no
fi

Таким образом, если вы ожидаете, что количество аргументов будет определенным, вы можете проверить последний аргумент:

if [ "$3" ]; then
  echo has args correct or not
else
  echo fixme
fi

И так можно делать с любым аргументом или переменной.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь