Толик Панков
hex_laden
............ .................. ................
October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

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

Это репост заметки из моего блога на сайте http://tolik-punkoff.com
Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/08/30/bash-kak-proverit-chislo-ili-stroka-v-peremennoj/

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.