Проверка, является ли входное число целым числом

Просто используйте самую верхнюю строку. Это появилось после yum обновленный Ваш kernel.

Вторая строка для загрузки ранее установленного ядра (в этом случае, это - ядро от дистрибутива),

Третья строка самоописывает.

Если Вы не коснетесь клавиатуры, то она загрузит значение по умолчанию (самое верхнее в Вашем случае)

Если Вам нравится изменять значение тайм-аута для ускорения, это - смотрит на man grub и в файл /boot/grub/grub.conf

33
23.08.2014, 01:42
9 ответов

Удалить кавычки

if ! [[ "$scale" =~ ^[0-9]+$ ]]
    then
        echo "Sorry integers only"
fi
28
27.01.2020, 19:37

Используйте оператор -eq команды test :

read scale
if ! [ "$scale" -eq "$scale" ] 2> /dev/null
then
    echo "Sorry integers only"
fi

Это не работает только в bash , но также и в любой оболочке POSIX. Из документации POSIX test :

n1 -eq  n2
    True if the integers n1 and n2 are algebraically equal; otherwise, false.
16
27.01.2020, 19:37
( scale=${scale##*[!0-9]*}
: ${scale:?input must be an integer}
) || exit

Это сделает проверку и выдаст вашу ошибку.

3
27.01.2020, 19:37

Для целых чисел без знака я использую:

read -r scale
[ -z "${scale//[0-9]}" ] && [ -n "$scale" ] || echo "Sorry integers only"

Тесты:

$ ./test.sh
7
$ ./test.sh
   777
$ ./test.sh
a
Sorry integers only
$ ./test.sh
""
Sorry integers only
$ ./test.sh

Sorry integers only
8
27.01.2020, 19:37

Поскольку OP, кажется, хочет только положительные целые числа:

[ "$1" -ge 0 ] 2>/dev/null

Примеры:

$ is_positive_int(){ [ "$1" -ge 0 ] 2>/dev/null && echo YES || echo no; }
$ is_positive_int word
no
$ is_positive_int 2.1
no
$ is_positive_int -3
no
$ is_positive_int 42
YES

Обратите внимание, что требуется один тест [:

$ [[ "word" -eq 0 ]] && echo word equals zero || echo nope
word equals zero
$ [ "word" -eq 0 ] && echo word equals zero || echo nope
-bash: [: word: integer expression expected
nope

Это связано с тем, что разыменование происходит с [[ :

$ word=other
$ other=3                                                                                                                                                                                  
$ [[ $word -eq 3 ]] && echo word equals other equals 3
word equals other equals 3
16
27.01.2020, 19:37

Please check How do I test if a variable is a number in Bash stackoverflow page. This page have some other good ways for checking integer number.

2
27.01.2020, 19:37

POSIX и переносимое решение:

read scale
if     [ -z "${scale##*[!0-9]*}" ]; 
then   echo "Sorry integers only"
fi
5
21.03.2020, 22:49

В bash вы можете использовать расширенные шаблоны внутри[[...]]:

scale=4
[[ $scale == +([[:digit:]]) ]] || echo "Sorry integers only"
# ==> no output
scale=4.0
[[ $scale == +([[:digit:]]) ]] || echo "Sorry integers only"
# ==> Sorry integers only
1
23.09.2020, 18:03

Для X больше 0 я использую

[ 0$X -gt 0 2>/dev/null ] && echo "is number" || echo "is string"

это не дает ошибки, если X пуст

0
23.01.2021, 17:45

Теги

Похожие вопросы