Переменные в BASH, как известно, типа не имеют (и как же это иной раз бесит). А проверить, что в переменной — число или строка иногда надо. На помощь придет grep
и регулярные выражения.
Команда grep -E -q regexp
проверит, соответствует ли переданная grep
строка, регулярному выражению regexp
Ключ -E
укажет команде grep
, что образец есть полное регулярное выражение (см. подробности здесь )
Ключ -q укажет, что в стандартный поток ввода-вывода отправятся соответствующие образцу строки, и если хоть одна из входных строк соответствует образцу, то код завершения команды будет 0, иначе 1.
Для простого примера больше одной строки и не надо.
Осталось составить регулярные выражения для нашего случая:
Целое положительное число: ^?[0-9]+$
Целое положительное, либо отрицательное число: ^-?[0-9]+$
Для примера проверим первый параметр скрипта, задаваемый из командной строки
1. положительные целые числа
#!/bin/bash if (echo "$1" | grep -E -q "^?[0-9]+$"); then echo "Number" else echo "Not Number" fi
2. положительные и отрицательные целые числа
#!/bin/bash if (echo "$1" | grep -E -q "^-?[0-9]+$"); then echo "Number" else echo "Not Number" fi
Pingback: Скрипт waiter, скрашиваем скучное ожидание в своих скриптах. Еще раз про обратный отсчет на BASH | Персональный блог Толика Панкова