The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Нужно проверить переменную, не число ли.?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 12-Май-11, 00:12 
Так не работает. :(

if [[ "$1"  =~ "^[0-9]+$" ]]; then
      ...
fi

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от ImPressed (ok) on 12-Май-11, 02:22 
> Так не работает. :(
>
 
> if [[ "$1"  =~ "^[0-9]+$" ]]; then
>       ...
> fi
>

Используйте grep/egrep для этих целей

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Нужно проверить переменную, не число ли.?"  +1 +/
Сообщение от ACCA (ok) on 12-Май-11, 02:36 
N=$(expr $1 + 0 2>dev/null) || echo Не число

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 12-Май-11, 15:12 
> N=$(expr $1 + 0 2>dev/null) || echo Не число

Это не красиво.
Но если ни один из вариантов не прокатит - применю

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

10. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от DeadLoco (ok) on 12-Май-11, 17:44 
> N=$(expr $1 + 0 2>dev/null) || echo Не число

$( echo $1 | egrep "^[0-9]*\.[0-9]+$" ) || echo NEIN

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

3. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от LSTemp (ok) on 12-Май-11, 04:03 
> Так не работает. :(
>
 
> if [[ "$1"  =~ "^[0-9]+$" ]]; then
>       ...
> fi
>

if [ -z "${1//[0-9]/}" ]
then
число
fi

PS
способ от ACCA - вообще учебник, куда и что вставлять :)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 12-Май-11, 15:31 
>> Так не работает. :(
>>
 
>> if [[ "$1"  =~ "^[0-9]+$" ]]; then
>>       ...
>> fi
>>

> if [ -z "${1//[0-9]/}" ]
> then
> число
> fi

Спасибо, заработало.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

12. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от sany (ok) on 12-Май-11, 19:11 
>[оверквотинг удален]
>>>
 
>>> if [[ "$1"  =~ "^[0-9]+$" ]]; then
>>>       ...
>>> fi
>>>

>> if [ -z "${1//[0-9]/}" ]
>> then
>> число
>> fi
> Спасибо, заработало.

Это не верно, ${1//[0-9]/} это башизм.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

13. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 12-Май-11, 19:55 

> Это не верно, ${1//[0-9]/} это башизм.

Скрипт все равно использует массив и $RANDOM, поэтому bash необходим.

P.S. Можно конечно, попробовать все переписать под sh ...

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

22. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от LSTemp (ok) on 15-Май-11, 00:16 
>[оверквотинг удален]
>>>> if [[ "$1"  =~ "^[0-9]+$" ]]; then
>>>>       ...
>>>> fi
>>>>
>>> if [ -z "${1//[0-9]/}" ]
>>> then
>>> число
>>> fi
>> Спасибо, заработало.
> Это не верно, ${1//[0-9]/} это башизм.

не надо узко мыслить.

это показ одного из методов решения данной задачи. реализация обработки регулярных выражений может быть в каждой конкретной ОС весьма специфична (в том числе и и за багов).

банальную замену символов на ура можно выполнить 1000 и одним вариантом, а не только с помощью шелл.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

4. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от phpcoder email(ok) on 12-Май-11, 06:39 
http://unix.stackexchange.com/questions/12253/checking-an-ar...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 12-Май-11, 15:10 
> http://unix.stackexchange.com/questions/12253/checking-an-ar...

Ни один из вариантов не заработал

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

9. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от erera22 (ok) on 12-Май-11, 15:42 
echo "${1}" | grep -vE "[a-zA-Z]" > /dev/null ; retval=$? ; echo ${retval}
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от sany (ok) on 12-Май-11, 19:09 
Удивлён кол-вом неправильных решений.

для проверки, что $1 удовлетворяет выражению "expr" нужно использовать конструкцию
(echo "$1" | grep -E -q "expr")
это POSIX-корректное выражение

для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например, равным ^-?[0-9]+$


то есть:

if (echo "$1" | grep -E -q "^-?[0-9]+$"); then
  ...
fi

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от ACCA (ok) on 12-Май-11, 23:10 
> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например,
> равным ^-?[0-9]+$

И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь cut -c ?

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

15. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 12-Май-11, 23:51 
>> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например,
>> равным ^-?[0-9]+$
> И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь
> cut -c ?

Стоп господа!
Мне надо проверка на целые натуральные числа.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от ACCA (ok) on 13-Май-11, 00:35 
> Мне надо проверка на целые натуральные числа.

Целое натуральное число может быть с пробелами, если его сунули в файл каким-нибудь printf "%7i", а ты его дёрнул из файла каким-нибудь cut -c 1-7. Например "    333". А могли сунуть printf "%-7i", тогда ты получишь "333    ".

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

23. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от LSTemp (ok) on 15-Май-11, 02:04 
>> Мне надо проверка на целые натуральные числа.
> Целое натуральное число может быть с пробелами, если его сунули в файл
> каким-нибудь printf "%7i", а ты его дёрнул из файла каким-нибудь cut
> -c 1-7. Например "    333". А могли сунуть
> printf "%-7i", тогда ты получишь "333    ".

это дело обработки входных данных и к топику не относится. может еще обсудим исключение комментариев во входных данных и всего прочего "что могло бы быть"?


Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

17. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от sany (ok) on 13-Май-11, 03:04 
>> для проверки, что $1 целое(положительное или отрицательное) можно expr взять, например,
>> равным ^-?[0-9]+$
> И что получится для аргумента " -333 ", выдернутого из файла каким-нибудь
> cut -c ?

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

18. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от Andrey Mitrofanov on 13-Май-11, 11:11 
> Так не работает. :(
> if [[ "$1"  =~ "^[0-9]+$" ]]; then

А вот так работает...
[[ "$1"  =~ ^[0-9]+$ ]];


Баг?... Или недоступно глубокое знание из man bash?? :-O

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 14-Май-11, 05:03 
>> Так не работает. :(
>> 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)

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

21. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от LSTemp (ok) on 15-Май-11, 00:10 
>> Так не работает. :(
>> 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


Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

28. "Оно! Нашёл."  +1 +/
Сообщение от Andrey Mitrofanov on 16-Май-11, 10:10 
>> Баг?... Или недоступно глубокое знание из 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.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

32. "Оно! Нашёл."  +1 +/
Сообщение от LSTemp (ok) on 19-Май-11, 01:04 
>[оверквотинг удален]
> 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.

все в этом мире может быть. и не все сервера мы сами строим...

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

19. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от pavlinux (ok) on 14-Май-11, 02:02 
> А вот так работает...
> [[ "$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
Не нумер


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

24. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от LSTemp (ok) on 15-Май-11, 02:15 
>[оверквотинг удален]
> || 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 используешь - вот и не парься - решение дано (просто подходи в следующий раз к задаче не однобоко, и помни что иногда ее можно решить необычным путем).

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

25. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от pavlinux (ok) on 16-Май-11, 00:15 
>>[оверквотинг удален]
>> bash: [: ЖОПА: integer expression expected
>> Не нумер
> не мучайся - тебе же видимо для лабы надо (производительность побоку).

Думаешь мы для него стараемся, это мы тут писками меряемся :)

Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

26. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 16-Май-11, 00:47 

> Думаешь мы для него стараемся, это мы тут писками меряемся :)

Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

27. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от pavlinux (ok) on 16-Май-11, 00:56 
>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?

Легко!

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

29. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 16-Май-11, 17:43 
>>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
>> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?
> Легко!

http://www.opennet.ru/openforum/vsluhforumID9/9133.html
http://www.opennet.ru/openforum/vsluhforumID9/9132.html
http://www.opennet.ru/openforum/vsluhforumID9/9131.html

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

30. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от LSTemp (ok) on 17-Май-11, 03:52 
>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?

а как на счет Вашего "достоинства"? Его мерять будем? Или Вы предпочитаете единолично бабло за решение абстрактно поставленных задач получать?


Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

31. "Нужно проверить переменную, не число ли.?"  +/
Сообщение от universite email(ok) on 17-Май-11, 11:41 
>>> Думаешь мы для него стараемся, это мы тут писками меряемся :)
>> Может вам еще пару вопросиков подкинуть, чтоб вы там достоинствами мерялись?
> а как на счет Вашего "достоинства"? Его мерять будем?

Никогда не мерял, нет необходимости :)

> Или Вы предпочитаете единолично бабло за решение абстрактно поставленных задач получать?

Могу Вас заверить, что эти скрипты пишутся не "на заказ".

Если Вы ратуете за монетизацию советов, то обратитесь к владельцу ресурсу, чтоб добавил кнопочку напротив каждого ника: "Donate", с возможностью показывать финансовые контакты ника.

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру