Переменные в 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
На pastebin
2. положительные и отрицательные целые числа
#!/bin/bash
if (echo "$1" | grep -E -q "^-?[0-9]+$"); then
echo "Number"
else
echo "Not Number"
fi
На pastebin
Это репост заметки из моего блога на сайте http://tolik-punkoff.com
Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/08/30/bash-k