LINUX.ORG.RU

bash проверка на число

 


2

1

Подскажите как в bash проверить является ли параметр числом. В интернете нашел такой пример:

#!/usr/bin/env bash
if ! [[ $1 =~ '^[0-9]+$' ]]; then
    echo "$1 не является числом." >&2
    exit 1
fi   
echo "$1 - число."
но у меня он не работает.
mike@mikepc:~/src/test$ ./test.sh 5
5 не является числом.
Подскажите что я делаю не правильно?


case "$1" in
[0-9][0-9][0-9][0-9]) echo число ;;
*) echo не число ;;
esac

такой способ через case лучше потому что это POSIX shell т.е. работает вообще везде

Spoofing ★★★★★
()
Последнее исправление: Spoofing (всего исправлений: 1)
Ответ на: комментарий от Miker

Кстати, именно для юзеров, плохо разбирающихся в скриптах (таких как я :)), и существует уже очень давно сервис shellcheck.net. Так же, в виде пакетов в дистрах (shellcheck 0.8.0-228).

Проверка в нем для данного скрипта:

Line 2:
if ! [[ $1 =~ '^[0-9]+$' ]]; then
              ^-- SC2076 (warning): Remove quotes from right-hand side of =~ to match as a regex rather than literally.

Исправленное:

#!/usr/bin/env bash
if ! [[ $1 =~ ^[0-9]+$ ]]; then
    echo "$1 не является числом." >&2
    exit 1
fi   
echo "$1 - число."

И результат:

$ ./test.sh 5     
5 - число.

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

Спасибо за shellcheck, пошёл исправлять свои скрипты

grazor ★★
()
Ответ на: комментарий от Spoofing

Ну ерунда же, только 4-значные числа пропустит. Правильная маска, но обратная:

*[!0-9]*) echo не число

vodz ★★★★★
()
Ответ на: комментарий от krasnh

Кстати, именно для юзеров, плохо разбирающихся в скриптах

Лорчую, тоже его использую, когда приходится мараться о shell-скрипты.

theNamelessOne ★★★★★
()
Ответ на: комментарий от her_s_gory

Ну так сам его и спроси (сам знаешь где).

Оке, не подумал

xwicked ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.