Расскажите, пожалуйста, как эта команда проверяет, имеет ли rnum целое число или нет

Это тип отклонения 'tcp-reset', который делает то, что ОС обычно делает с закрытыми портами:

-A INPUT -i ens3 -p tcp -j REJECT --reject-with tcp-reset
1
21.12.2016, 16:06
2 ответа

Этот скрипт проверяет, является ли он номером или нет:

num=123
if [[ "$num" =~ ^[0-9]+$ ]]
then
echo "It is Number"
fi
-1
28.01.2020, 02:12

Ульрих Шварц действительно ответил на вопрос уже в своем комментарии. Просто оставьте 2> / dev / null и посмотрите, что произойдет, если $ rnum не является целым числом. Рассмотрим следующий пример, записанный в интерактивном сеансе bash :

$ rnum='foo'
$ [ "$rnum" -eq "$rnum" ]
-bash: [: foo: integer expression expected
$ echo $?
2

Если вы ищете альтернативный метод проверки того, является ли значение целым числом, Prashant Band уже его предоставил. Однако я предпочитаю более портативное решение (не использующее оператор = ~ ):

expr "X$rnum" : 'X[-+]\{0,1\}[0-9]\{1,\}$' >/dev/null || {
    echo 'rnum is not a number' >&2
    exit 1
}

Обратите внимание на странные значения, такие как -0 , +0 и 000 обрабатываются как целые числа. Однако это то же поведение, что и при использовании исходной конструкции, представленной в вашем вопросе.

0
28.01.2020, 02:12

Теги

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