bash проверить что переменная число

Как проверить, является ли переменная числом в Bash?

Я просто не могу понять, как я могу убедиться, что аргумент, переданный моему script, является числом или нет.

Все, что я хочу сделать, это что-то вроде этого:

^7+$ ]] && echo OKKK || echo NOOO

37 ответов

Один из подходов заключается в использовании регулярного выражения, например, так:

Если значение не обязательно является целым числом, попробуйте соответствующим образом изменить регулярное выражение; например:

. или для обработки чисел со знаком:

изменилась между 3.1 и 3.2, тогда как обработка обратной косой черты в присваиваниях постоянна во всех соответствующих выпусках bash. Таким образом, следуя практике всегда присваивать регулярные выражения переменным перед сопоставлением с ними с помощью =

избежать неожиданностей. Я делаю это здесь, чтобы учить хорошим привычкам, даже если у этого конкретного регулярного выражения нет выхода из обратной косой черты.

(x) ]] без необходимости сохранения в переменной также будет работать только начиная с 4.0. Расширенные шаблоны нужно включить только один раз в начале скрипта, чтобы это не имело значения. Он также совместим со всеми версиями bash, начиная как минимум с 2.05b. Эти последние мои комментарии уже были о том, почему кто-то предпочел бы расширенные шаблоны, а не =

. Информация также может быть полезна для других читателей, возможно, если они заботятся о совместимости.

‘^6+$’ ]]; then echo good; fi и ничего не получил. Но re=’^3+$’; if [[ 123 =

в кавычки, делает его уже не регулярным выражением, а регулярной строкой (в современных версиях bash, но не в некоторых древних), тогда как версия, которую я дал в этом ответе, работает последовательно во всех релиз, где =

» И «[[]]»? Может кто-нибудь объяснить компоненты if / else?

Без багизмов (работает даже в System V sh),

Это отклоняет пустые строки и строки, содержащие не-цифры, принимая все остальное.

Следующее решение может также использоваться в базовых оболочках, таких как Bourne, без необходимости использования регулярных выражений. В основном любые операции вычисления числовых значений, использующие не числа, приведут к ошибке, которая будет неявно рассматриваться как ложная в оболочке:

Перенаправление стандартной ошибки предназначено для того, чтобы скрыть сообщение «ожидается целочисленное выражение», которое распечатывает bash, если у нас нет числа.

ПРЕДОСТЕРЕЖЕНИЯ (благодаря комментариям ниже):

Источник

Как проверить, является ли переменная числом в Bash?

Я просто не могу понять, как мне убедиться, что аргумент, переданный моему сценарию, является числом или нет.

Все, что я хочу сделать, это что-то вроде этого:

30 ответов

Один из подходов заключается в использовании регулярного выражения, например, так:

Читайте также:  размер 6xl это какой размер женский

Если значение не обязательно является целым числом, рассмотрите возможность изменения регулярного выражения соответствующим образом; например:

. или для обработки чисел со знаком:

Я попробовал рецепт ультрапильного полотна, так как он мне показался наиболее практичным, и не смог заставить его работать. В конце концов, я разработал другой способ, основанный, как и другие, на подстановке параметров, на этот раз с заменой регулярного выражения:

Что мне нравится в этом, так это его компактность и гибкость. В этой форме он работает только с целыми числами без разделителей с основанием 10, хотя, конечно, вы можете использовать сопоставление с образцом для удовлетворения других потребностей.

Без башизмов (работает даже в System V sh),

Это отклоняет пустые строки и строки, содержащие не цифры, принимая все остальное.

Следующее решение также можно использовать в базовых оболочках, таких как Bourne, без необходимости использования регулярных выражений. По сути, любые операции оценки числовых значений с использованием нечисловых значений приведут к ошибке, которая неявно будет считаться ложной в оболочке:

Перенаправление стандартной ошибки предназначено для того, чтобы скрыть сообщение «ожидаемое целочисленное выражение», которое bash выводит на случай, если у нас нет числа.

ПРЕДЛОЖЕНИЯ (спасибо комментариям ниже):

Источник

Как проверить, является ли переменная числом в Bash?

Я просто не могу понять, как убедиться, что аргумент, переданный моему скрипту, является числом или нет.

все, что я хочу сделать, это что-то вроде этого:

30 ответов

один подход заключается в использовании регулярного выражения, например:

Если значение не обязательно является целым числом, рассмотрите возможность изменения регулярного выражения соответствующим образом; например:

. или, для обработки чисел со знаком:

без bashisms (работает даже в системе в ш),

это отклоняет пустые строки и строки, содержащие не цифры, принимая все остальное.

следующее решение также может использоваться в базовых оболочках, таких как Bourne, без необходимости регулярных выражений. В основном любые операции оценки числовых значений, использующие номера, приведут к ошибке, которая будет неявно рассматриваться как false в shell:

перенаправление стандартной ошибки есть, чтобы скрыть сообщение «integer expression expected», которое bash распечатывает в случае, если у нас нет числа.

предостережения (благодаря комментариям ниже):

это проверяет, является ли число неотрицательным целым числом и является независимым от оболочки (т. е. без башизмов) и использует только встроенные оболочки:

НО ОШИБАЕТСЯ.
As jilles прокомментировал и предложил в ответ это правильный способ сделать это с помощью оболочки-моделей.

Я удивлен решениями, непосредственно анализирующими числовые форматы в оболочке. оболочка не очень подходит для этого, являясь DSL для управления файлами и процессами. Есть достаточное количество парсеров немного ниже, например:

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

Источник

Как проверить, является ли переменная числом в Bash?

Я просто не могу понять, как я могу убедиться, что аргумент, переданный моему script, является числом или нет.

Все, что я хочу сделать, это что-то вроде этого:

Один из подходов заключается в использовании регулярного выражения, например, так:

Если значение не обязательно является целым числом, попробуйте соответствующим образом изменить регулярное выражение; например:

. или для обработки чисел со знаком:

Без багизмов (работает даже в System V sh),

Это отклоняет пустые строки и строки, содержащие не-цифры, принимая все остальное.

Следующее решение также можно использовать в базовых оболочках, таких как Bourne, без необходимости использования регулярных выражений. В основном любые операции вычисления числовых значений, использующие не числа, приведут к ошибке, которая будет неявно рассматриваться как ложная в оболочке:

Перенаправление стандартной ошибки предназначено для того, чтобы скрыть сообщение «ожидается целочисленное выражение», которое распечатывает bash, если у нас нет числа.

ПРЕДОСТЕРЕЖЕНИЯ (благодаря комментариям ниже):

    Числа с десятичными точками не идентифицируются как действительные «числа» Использование [[ ]] вместо [ ] всегда будет иметь значение true Большинство небашевых оболочек всегда будут оценивать это выражение как true Поведение в Bash недокументировано и поэтому может меняться без предупреждения Если значение включает пробелы после числа (например, «1 a»), возникает ошибка, например bash: [[: 1 a: syntax error in expression (error token is «a») Если значение совпадает с var-name (например, я = «i»), выдает ошибку, например bash: [[: i: expression recursion level exceeded (error token is «i»)

Источник

Как проверить, что переменная является числом?

Добрый день, уважаемые.

Скучая на работе и просто решив побаловаться BAT, я написал небольшой скрипт, который производит перезагрузку системы при помощи команды shutdown. Как проверить, что переменная %TIME% является целочисленной?

Проверить что переменная является любой строкой или любым числом
Можно ли в Python (не через type) проверить, является ли переменная любой строкой\любым числом.

Как проверить, является ли переменная числом
Есть структура точки struct Point < double x; double y; >; Есть вектор из структур.

Проверить является ли переменная числом
Проверить, является ли переменная числом в C++ Builder не охота в цикл загонять и проверять, есть.

Как проверить, что строка является вещественным числом?
например задана строка string str=»6.9″ и как проверить что вещественное? для целого типа можно.

retrospider, Ваша переменная «TIME» может войти в конфликт с одноимённой системной динамической переменной, поэтому переименуйте её, например, в «$TIME«.

Читайте также:  какой знак зодиака у петра 1

Решение

Но там и ошибку выдаёт «Неверное число. Числа ограничены 32 битами точности.»
И errorlevel не 0.
Так что всё нормально.

Добавлено через 1 час 40 минут
На самом деле, всё несколько сложнее
— Число может выходить из допустимого диапазона (как в примере).
— Число может быть не той системы (восмеричное, шестнадцатиричное).
— Число может иметь незначащие нули (001).
— Число может быть со знаком.
— Это может быть даже выражение, даже содержащее другие переменные

Я последовал совету товарища Smitis, потому что для меня он проще и понятнее. Из ваших комментариев не совсем понял, какие неправильные данные можно ввести, чтобы скрипт не счел это ошибкой?

Вот переделанный вариант кода:

Подскажите, как можно сломать?

PS: неужели использования оператора GOTO стараются избежать даже в пакетных файлах? А мне он так нравится : (

Спасибо! Я уже и сам заметил, в новой версии кода ввел проверку еще и на отрицательные значения.

Добавлено через 2 часа 4 минуты
Последняя версия кода (мало ли, вдруг кому пригодится):

Не претендую на правильность и оптимизацию, даже напротив, уверен, что код «деревянный» и многие моменты можно было сократить, чтобы сам код уменьшился в размерах раза в два-три, но. таков уж я. Пакетный файл, ради интереса, скомпилировал в исполняемый файл и теперь использую программку, запуская ее с рабочего стола из rocket dock. Спасибо всем, кто помог мне.

PS: Знаю, что куда как проще и быстрее вызвать shutdown из CMD. Но мне было интереснее написать для этого скрипт и сделать для него какой-нибудь текстовый интерфейс.

Как определить, является ли переменная целым числом
Доброй ночи! Есть функция матлаб чтобы определить является ли переменная целым числом, что-нибудь.

Проверить, что заданное целое число является трехзначным нечетным числом
Заданное целое число является трехзначным нечетным числом (учитывайте и отрицательные числа).

Как проверить, является ли введенное значение числом?
В поле Edit нужно ввести число. Как проверить, не ввел ли туда пользователь недопустимый символ.

Как проверить, является ли эта строка числом?
С помощью Console.ReadLine() считываю строку, как проверить, является ли эта строка числом? Я.

Как проверить, является ли введенная пользователем строка числом?
Как проверить, является ли введенная пользователем строка числом?

Как проверить,является ли определенный символ в строке числом?
Пользователем вводится строка,после чего нужно посимвольно ее проверить. Если какой-то символ.

Источник

Сказочный портал