Проверка того, является ли переменная числом в Bash

Python, Perl, Tcl и все языки сценариев оболочки UNIX (например, Bash) являются примерами интерпретируемых языков. Именно по этой причине Bash читает и интерпретирует одну команду за раз и не разделяет свои переменные по типам. Фактически, Bash является нетипизированным.

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

Сравнение переменных

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

Использование регулярных выражений

В качестве первого примера давайте напишем сценарий integers.sh, который использует регулярное выражение, чтобы убедиться, что заданный вход является целым числом:

Основными компонентами являются:

  • $1 содержит значение параметра, переданного для вызова скрипта
  • регулярное выражение задается после команды grep.
  • [[:digit:]] - является эквивалентом [0-9]

Более точно, Unix pipe обеспечивает стандартный вывод первого процесса (команда echo) на стандартный ввод второй команды (команда grep). Принимаемые символы - это числа от 0 до 9. Кроме того, знак вместе с тире указывает, что мы можем использовать отрицательные числа.

Если мы хотим определить регулярное выражение для положительных чисел, то нужно просто убрать знак тире. Итак, давайте покажем два примера вызова предыдущего сценария.

Используя целочисленное значение, мы имеем:

bash целочисленное значение

В противном случае, используя строку, мы получим:

Проверка строки

Как мы видим, регулярное выражение правильно принимает целочисленное значение, и, как и ожидалось, оно отвергает слово и не выводит его на консоль.

Использование оператора "тильда"

Другим способом решения проблемы является использование оператора равной тильды (=~). Это позволяет использовать регулярные выражения в операторе if:

Правая часть булева условия представляет собой расширенное регулярное выражение. Если левая часть совпадает, оператор возвращает 0, в противном случае - 1.

Давайте сгруппируем эти последние инструкции в сценарий test.sh и вызовем его:

Использование оператора "тильда"

Это означает, что скрипт корректно завершается со статусом 0 в случае, если мы используем число. В противном случае он сообщает об ошибке и завершается со статусом 1.

Сопоставление вещественных чисел

Мы можем просто изменить правило соответствия для регулярного выражения, чтобы оно распознавало вещественные числа:

Для вещественных чисел со знаком нам нужно использовать:

Заключение

В этом руководстве мы объяснили, как проверить, является ли переменная числом в Bash. Все предложенные решения основаны на использовании регулярных выражений.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий