BASH: Как проверить, число или строка в переменной.

Переменные в 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