- Нужно проверить переменную, не число ли.?, ImPressed, 02:22 , 12-Май-11 (1)
> Так не работает. :( > > if [[ "$1" =~ "^[0-9]+$" ]]; then > ... > fi > Используйте grep/egrep для этих целей
- Нужно проверить переменную, не число ли.?, ACCA, 02:36 , 12-Май-11 (2) +1
N=$(expr $1 + 0 2>dev/null) || echo Не число
- Нужно проверить переменную, не число ли.?, LSTemp, 04:03 , 12-Май-11 (3)
> Так не работает. :( > > if [[ "$1" =~ "^[0-9]+$" ]]; then > ... > fi > if [ -z "${1//[0-9]/}" ] then число fi PS способ от ACCA - вообще учебник, куда и что вставлять :)
- Нужно проверить переменную, не число ли.?, universite, 15:31 , 12-Май-11 (8)
>> Так не работает. :( >> >> if [[ "$1" =~ "^[0-9]+$" ]]; then >> ... >> fi >> > if [ -z "${1//[0-9]/}" ] > then > число > fi Спасибо, заработало.
- Нужно проверить переменную, не число ли.?, sany, 19:11 , 12-Май-11 (12)
>[оверквотинг удален] >>> >>> if [[ "$1" =~ "^[0-9]+$" ]]; then >>> ... >>> fi >>> >> if [ -z "${1//[0-9]/}" ] >> then >> число >> fi > Спасибо, заработало.Это не верно, ${1//[0-9]/} это башизм.
- Нужно проверить переменную, не число ли.?, universite, 19:55 , 12-Май-11 (13)
> Это не верно, ${1//[0-9]/} это башизм.Скрипт все равно использует массив и $RANDOM, поэтому bash необходим. P.S. Можно конечно, попробовать все переписать под sh ...
- Нужно проверить переменную, не число ли.?, LSTemp, 00:16 , 15-Май-11 (22)
>[оверквотинг удален] >>>> if [[ "$1" =~ "^[0-9]+$" ]]; then >>>> ... >>>> fi >>>> >>> if [ -z "${1//[0-9]/}" ] >>> then >>> число >>> fi >> Спасибо, заработало. > Это не верно, ${1//[0-9]/} это башизм.не надо узко мыслить. это показ одного из методов решения данной задачи. реализация обработки регулярных выражений может быть в каждой конкретной ОС весьма специфична (в том числе и и за багов). банальную замену символов на ура можно выполнить 1000 и одним вариантом, а не только с помощью шелл.
- Нужно проверить переменную, не число ли.?, phpcoder, 06:39 , 12-Май-11 (4)
- Нужно проверить переменную, не число ли.?, erera22, 15:42 , 12-Май-11 (9)
echo "${1}" | grep -vE "[a-zA-Z]" > /dev/null ; retval=$? ; echo ${retval}
- Нужно проверить переменную, не число ли.?, sany, 19:09 , 12-Май-11 (11)
Удивлён кол-вом неправильных решений.для проверки, что $1 удовлетворяет выражению "expr" нужно использовать конструкцию (echo "$1" | grep -E -q "expr") это POSIX-корректное выражение для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например, равным ^-?[0-9]+$ то есть:
if (echo "$1" | grep -E -q "^-?[0-9]+$"); then ... fi
- Нужно проверить переменную, не число ли.?, ACCA, 23:10 , 12-Май-11 (14)
> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например, > равным ^-?[0-9]+$ И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь cut -c ?
- Нужно проверить переменную, не число ли.?, universite, 23:51 , 12-Май-11 (15)
>> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например, >> равным ^-?[0-9]+$ > И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь > cut -c ?Стоп господа! Мне надо проверка на целые натуральные числа.
- Нужно проверить переменную, не число ли.?, ACCA, 00:35 , 13-Май-11 (16)
> Мне надо проверка на целые натуральные числа.Целое натуральное число может быть с пробелами, если его сунули в файл каким-нибудь printf "%7i", а ты его дёрнул из файла каким-нибудь cut -c 1-7. Например " 333". А могли сунуть printf "%-7i", тогда ты получишь "333 ".
- Нужно проверить переменную, не число ли.?, LSTemp, 02:04 , 15-Май-11 (23)
>> Мне надо проверка на целые натуральные числа. > Целое натуральное число может быть с пробелами, если его сунули в файл > каким-нибудь printf "%7i", а ты его дёрнул из файла каким-нибудь cut > -c 1-7. Например " 333". А могли сунуть > printf "%-7i", тогда ты получишь "333 ".это дело обработки входных данных и к топику не относится. может еще обсудим исключение комментариев во входных данных и всего прочего "что могло бы быть"?
- Нужно проверить переменную, не число ли.?, sany, 03:04 , 13-Май-11 (17)
>> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например, >> равным ^-?[0-9]+$ > И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь > cut -c ?в таких случаях правильное поведение - ошибка разбора, программист сам должен позаботиться сделать trim для строки перед разбором, а если лень, то регулярное выражение не сложно подправить.
- Нужно проверить переменную, не число ли.?, Andrey Mitrofanov, 11:11 , 13-Май-11 (18)
> Так не работает. :( > if [[ "$1" =~ "^[0-9]+$" ]]; then А вот так работает... [[ "$1" =~ ^[0-9]+$ ]]; Баг?... Или недоступно глубокое знание из man bash?? :-O
- Нужно проверить переменную, не число ли.?, universite, 05:03 , 14-Май-11 (20)
>> Так не работает. :( >> if [[ "$1" =~ "^[0-9]+$" ]]; then > А вот так работает... > [[ "$1" =~ ^[0-9]+$ ]]; > Баг?... Или недоступно глубокое знание из man bash?? :-O Хммм. Сработало. # /usr/local/bin/bash --version GNU bash, version 4.1.10(1)-release (amd64-portbld-freebsd8.2) - Нужно проверить переменную, не число ли.?, LSTemp, 00:10 , 15-Май-11 (21)
>> Так не работает. :( >> if [[ "$1" =~ "^[0-9]+$" ]]; then > А вот так работает... > [[ "$1" =~ ^[0-9]+$ ]]; > Баг?... Или недоступно глубокое знание из man bash?? :-O одно из двух... [sysrha@local ~]$ bash --version GNU bash, version 3.00.16(1)-release (i386-redhat-linux-gnu) Copyright (C) 2004 Free Software Foundation, Inc. [sysrha@local ~]$ a='123'; echo -n "$a - "; [[ "$a" =~ '^[0-9]+$' ]] && echo NO || echo YES 123 - NO [sysrha@local ~]$ a='_123'; echo -n "$a - "; [[ "$a" =~ '^[0-9]+$' ]] && echo NO || echo YES _123 - YES
- Оно! Нашёл., Andrey Mitrofanov, 10:10 , 16-Май-11 (28) +1
>> Баг?... Или недоступно глубокое знание из man bash?? :-O > одно из двух...Аааа! Это Оно, Великое Знание. Не каждый долетит до середины man bash, и уж точно не доплывёт. > [sysrha@local ~]$ bash --version > GNU bash, version 3.00.16(1)-release (i386-redhat-linux-gnu) > ]] && echo NO || echo YES (Тонко.) $ read a; echo -n "$a - "; [[ "$a" =~ '^[0-9]+$' ]] && echo OOPS || echo NAYS 123 123 - NAYS $ read a; echo -n "$a - "; [[ "$a" =~ '^[0-9]+$' ]] && echo OOPS || echo NAYS qwer qwer - NAYS $ shopt compat31 compat31 off $ shopt -s compat31 $ read a; echo -n "$a - "; [[ "$a" =~ '^[0-9]+$' ]] && echo OOPS || echo NAYS 123 123 - OOPS $ read a; echo -n "$a - "; [[ "$a" =~ '^[0-9]+$' ]] && echo OOPS || echo NAYS qwe qwe - NAYS $ bash --version GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc. $ _
compat31 If set, bash changes its behavior to that of version 3.1 with respect to quoted arguments to the conditional command’s =~ operator.
- Оно! Нашёл., LSTemp, 01:04 , 19-Май-11 (32) +1
>[оверквотинг удален] > qwe - NAYS > $ bash --version > GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) > Copyright (C) 2007 Free Software Foundation, Inc. > $ _ > compat31 > If set, bash changes its behavior to that > of version 3.1 with respect to quoted arguments > to > the conditional command’s =~ operator. несомненно глубокий поклон, за всех птиц, "которые не долетели", но я же показывал: [root@local localdomain]# bash -version GNU bash, version 3.00.16(1)-release (i386-redhat-linux-gnu) Copyright (C) 2004 Free Software Foundation, Inc. все в этом мире может быть. и не все сервера мы сами строим...
- Нужно проверить переменную, не число ли.?, pavlinux, 02:02 , 14-Май-11 (19)
> А вот так работает... > [[ "$1" =~ ^[0-9]+$ ]]; >pavel@suse64:/tmp> a=1; pavel@suse64:/tmp> if [[ "$a" =~ "^[0-9]+$" ]]; then echo Нумер; else echo Не нумер; fi; Не нумер pavel@suse64:/tmp> a=ЖОПА pavel@suse64:/tmp> if [[ "$a" =~ "^[0-9]+$" ]]; then echo Нумер; else echo Не нумер; fi; Не нумер --- [ $1 -ge 0 -o $1 -lt 0 ] && echo "Нумер" || echo "Не нумер"
pavel@suse64:/tmp> a=1; pavel@suse64:/tmp> [ $a -ge 0 -o $a -lt 0 ] && echo "Нумер" || echo "Не нумер" Нумер pavel@suse64:/tmp> a=ЖОПА; pavel@suse64:/tmp> [ $a -ge 0 -o $a -lt 0 ] && echo "Нумер" || echo "Не нумер" bash: [: ЖОПА: integer expression expected Не нумер
- Нужно проверить переменную, не число ли.?, LSTemp, 02:15 , 15-Май-11 (24)
>[оверквотинг удален] > || echo "Не нумер" > pavel@suse64:/tmp> a=1; > pavel@suse64:/tmp> [ $a -ge 0 -o $a -lt 0 ] && echo > "Нумер" || echo "Не нумер" > Нумер > pavel@suse64:/tmp> a=ЖОПА; > pavel@suse64:/tmp> [ $a -ge 0 -o $a -lt 0 ] && echo > "Нумер" || echo "Не нумер" > bash: [: ЖОПА: integer expression expected > Не нумер не мучайся - тебе же видимо для лабы надо (производительность побоку). заменяй все НЕ_ЦИФРЫ на пустое место (shell, awk, sed, etc) и сравнивай результат с пустой строкой - все. PS все демагогия на счет "башизма" и перенорса относительна. и это совсем другой вопрос. как ты сказал - bash используешь - вот и не парься - решение дано (просто подходи в следующий раз к задаче не однобоко, и помни что иногда ее можно решить необычным путем).
- Нужно проверить переменную, не число ли.?, pavlinux, 00:15 , 16-Май-11 (25)
>>[оверквотинг удален] >> bash: [: ЖОПА: integer expression expected >> Не нумер > не мучайся - тебе же видимо для лабы надо (производительность побоку).Думаешь мы для него стараемся, это мы тут писками меряемся :)
- Нужно проверить переменную, не число ли.?, universite, 00:47 , 16-Май-11 (26)
> Думаешь мы для него стараемся, это мы тут писками меряемся :) Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?
- Нужно проверить переменную, не число ли.?, pavlinux, 00:56 , 16-Май-11 (27)
>> Думаешь мы для него стараемся, это мы тут писками меряемся :) > Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?Легко!
- Нужно проверить переменную, не число ли.?, LSTemp, 03:52 , 17-Май-11 (30)
>> Думаешь мы для него стараемся, это мы тут писками меряемся :) > Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?а как на счет Вашего "достоинства"? Его мерять будем? Или Вы предпочитаете единолично бабло за решение абстрактно поставленных задач получать?
- Нужно проверить переменную, не число ли.?, universite, 11:41 , 17-Май-11 (31)
>>> Думаешь мы для него стараемся, это мы тут писками меряемся :) >> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись? > а как на счет Вашего "достоинства"? Его мерять будем? Никогда не мерял, нет необходимости :) > Или Вы предпочитаете единолично бабло за решение абстрактно поставленных задач получать? Могу Вас заверить, что эти скрипты пишутся не "на заказ". Если Вы ратуете за монетизацию советов, то обратитесь к владельцу ресурсу, чтоб добавил кнопочку напротив каждого ника: "Donate", с возможностью показывать финансовые контакты ника.
|