Так не работает. :(
if [[ "$1" =~ "^[0-9]+$" ]]; then
...
fi
> Так не работает. :(
>
> if [[ "$1" =~ "^[0-9]+$" ]]; then
> ...
> fi
>Используйте grep/egrep для этих целей
N=$(expr $1 + 0 2>dev/null) || echo Не число
> N=$(expr $1 + 0 2>dev/null) || echo Не числоЭто не красиво.
Но если ни один из вариантов не прокатит - применю
> N=$(expr $1 + 0 2>dev/null) || echo Не число$( echo $1 | egrep "^[0-9]*\.[0-9]+$" ) || echo NEIN
> Так не работает. :(
>
> if [[ "$1" =~ "^[0-9]+$" ]]; then
> ...
> fi
>if [ -z "${1//[0-9]/}" ]
then
число
fiPS
способ от ACCA - вообще учебник, куда и что вставлять :)
>> Так не работает. :(
>>
>> if [[ "$1" =~ "^[0-9]+$" ]]; then
>> ...
>> fi
>>
> if [ -z "${1//[0-9]/}" ]
> then
> число
> fiСпасибо, заработало.
>[оверквотинг удален]
>>>
>>> if [[ "$1" =~ "^[0-9]+$" ]]; then
>>> ...
>>> fi
>>>
>> if [ -z "${1//[0-9]/}" ]
>> then
>> число
>> fi
> Спасибо, заработало.Это не верно, ${1//[0-9]/} это башизм.
> Это не верно, ${1//[0-9]/} это башизм.Скрипт все равно использует массив и $RANDOM, поэтому bash необходим.
P.S. Можно конечно, попробовать все переписать под sh ...
>[оверквотинг удален]
>>>> if [[ "$1" =~ "^[0-9]+$" ]]; then
>>>> ...
>>>> fi
>>>>
не надо узко мыслить.
это показ одного из методов решения данной задачи. реализация обработки регулярных выражений может быть в каждой конкретной ОС весьма специфична (в том числе и и за багов).
банальную замену символов на ура можно выполнить 1000 и одним вариантом, а не только с помощью шелл.
http://unix.stackexchange.com/questions/12253/checking-an-ar...
> http://unix.stackexchange.com/questions/12253/checking-an-ar...Ни один из вариантов не заработал
echo "${1}" | grep -vE "[a-zA-Z]" > /dev/null ; retval=$? ; echo ${retval}
Удивлён кол-вом неправильных решений.для проверки, что $1 удовлетворяет выражению "expr" нужно использовать конструкцию
(echo "$1" | grep -E -q "expr")
это POSIX-корректное выражениедля проверки, что $1 целое(положительное или отрицательное) можно expr взять, например, равным ^-?[0-9]+$
то есть:if (echo "$1" | grep -E -q "^-?[0-9]+$"); then
...
fi
> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например,
> равным ^-?[0-9]+$И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь cut -c ?
>> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например,
>> равным ^-?[0-9]+$
> И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь
> cut -c ?Стоп господа!
Мне надо проверка на целые натуральные числа.
> Мне надо проверка на целые натуральные числа.Целое натуральное число может быть с пробелами, если его сунули в файл каким-нибудь printf "%7i", а ты его дёрнул из файла каким-нибудь cut -c 1-7. Например " 333". А могли сунуть printf "%-7i", тогда ты получишь "333 ".
>> Мне надо проверка на целые натуральные числа.
> Целое натуральное число может быть с пробелами, если его сунули в файл
> каким-нибудь printf "%7i", а ты его дёрнул из файла каким-нибудь cut
> -c 1-7. Например " 333". А могли сунуть
> printf "%-7i", тогда ты получишь "333 ".это дело обработки входных данных и к топику не относится. может еще обсудим исключение комментариев во входных данных и всего прочего "что могло бы быть"?
>> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например,
>> равным ^-?[0-9]+$
> И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь
> cut -c ?в таких случаях правильное поведение - ошибка разбора, программист сам должен позаботиться сделать trim для строки перед разбором, а если лень, то регулярное выражение не сложно подправить.
> Так не работает. :(
> if [[ "$1" =~ "^[0-9]+$" ]]; thenА вот так работает...
[[ "$1" =~ ^[0-9]+$ ]];
Баг?... Или недоступно глубокое знание из man bash?? :-O
>> Так не работает. :(
>> 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)
>> Так не работает. :(
>> 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
>> Баг?... Или недоступно глубокое знание из 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.
>[оверквотинг удален]
> 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.все в этом мире может быть. и не все сервера мы сами строим...
> А вот так работает...
> [[ "$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
Не нумер
>[оверквотинг удален]
> || 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 используешь - вот и не парься - решение дано (просто подходи в следующий раз к задаче не однобоко, и помни что иногда ее можно решить необычным путем).
>>[оверквотинг удален]
>> bash: [: ЖОПА: integer expression expected
>> Не нумер
> не мучайся - тебе же видимо для лабы надо (производительность побоку).Думаешь мы для него стараемся, это мы тут писками меряемся :)
> Думаешь мы для него стараемся, это мы тут писками меряемся :)Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?
>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?Легко!
>>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
>> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?
> Легко!http://www.opennet.me/openforum/vsluhforumID9/9133.html
http://www.opennet.me/openforum/vsluhforumID9/9132.html
http://www.opennet.me/openforum/vsluhforumID9/9131.html
>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?а как на счет Вашего "достоинства"? Его мерять будем? Или Вы предпочитаете единолично бабло за решение абстрактно поставленных задач получать?
>>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
>> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?
> а как на счет Вашего "достоинства"? Его мерять будем?Никогда не мерял, нет необходимости :)
> Или Вы предпочитаете единолично бабло за решение абстрактно поставленных задач получать?
Могу Вас заверить, что эти скрипты пишутся не "на заказ".
Если Вы ратуете за монетизацию советов, то обратитесь к владельцу ресурсу, чтоб добавил кнопочку напротив каждого ника: "Donate", с возможностью показывать финансовые контакты ника.