Отправляет email-рассылки с помощью сервиса Sendsay

bash numeral

Как в bash проверить является ли переменная цифрой?
Только без egrep и т.д , именно bash

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28749; Возраст листа: 1210; Участников: 1391
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/610850

Ответить   Igor Nemilentsev Thu, 16 Nov 2006 19:27:19 +0200 (EET) (#610850)

 

Ответы:

В сообщении от 16 ноября 2006 19:27 Igor Nemilentsev написал(a):

как насчет

expr $переменная + 0

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28750; Возраст листа: 1211; Участников: 1391
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/610877

Ответить   Fri, 17 Nov 2006 00:37:57 +0200 (#610877)

 

On Fri, 17 Nov 2006, Amper wrote:

Цифрой а не числом. В таком случае нужно:
i=5; [[ $(expr $i + 0 2>/dev/null) && ${#i} == 1 ]] && echo ok || echo none
ok
i=55; [[ $(expr $i + 0 2>/dev/null) && ${#i} == 1 ]] && echo ok || echo none
none
i=55er; [[ $(expr $i + 0 2>/dev/null) && ${#i} == 1 ]] && echo ok || echo none
none

Вот пока придумал:
i=123; [ ! ${i#[1-9]} ] && echo ok || echo none
none
i=1; [ ! ${i#[1-9]} ] && echo ok || echo none
ok
i=err1; [ ! ${i#[1-9]} ] && echo ok || echo none
none
Но как-то длинно всё это.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28790; Возраст листа: 1211; Участников: 1394
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/611254

Ответить   Igor Nemilentsev Fri, 17 Nov 2006 20:42:45 +0200 (EET) (#611254)

 

В сообщении от 1163788965 секунд после начала Эпохи Igor Nemilentsev написал(а):

А может лучше так

$ i=123; [ ! ${i//[0-9]} ] && echo number || echo not number

?

Так как в этом случаи проверяется все значение переменной, а не только
ее начало.

Ответить   Konstantin Korikov Fri, 17 Nov 2006 22:16:42 +0200 (#611262)

 

On Fri, 17 Nov 2006, Konstantin Korikov wrote:

i=123; [ ! ${i//[0-9]} ] && echo number || echo not number
number
^^^^^^ Но не цифра. ${i//[0-9]} совпадёт со всеми цифрами числа,
в результате пустая переменная. А ${i/[0-9]} будет пустой
только в случае совпадения с переменной из одной цифрой.
В этом случае ${i/[0-9]} == ${i#[0-9]}.
Вообщем вопрос закрыт, спасибо.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28797; Возраст листа: 1212; Участников: 1394
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/611433

Ответить   Igor Nemilentsev Sat, 18 Nov 2006 02:06:28 +0200 (EET) (#611433)

 

В сообщении от 1163808388 секунд после начала Эпохи Igor Nemilentsev написал(а):

А, ну тогда можно еще так

$ i=1; case $i in [0-9]) echo digit;; *) echo not digit;; esac

Ответить   Konstantin Korikov Sat, 18 Nov 2006 14:49:42 +0200 (#611439)

 

Здравствуйте Igor Nemilentsev
В сообщении от Thursday 16 November 2006 20:27 Igor Nemilentsev
написал(a):

У меня похожий вопрос - у меня есть каталог (с подкаталогами) с
исходными текстами программ, мне нужно получить сумму размеров этих
файлов - не то, сколько они занимают места на диске, а именно сколько
байт в этих файлах (отсеить всё кроме .c, .cpp и .h и сложить по
пакетам и итого) - нужно для отчёта о проделанной работе :).
Попытался взять ls -lR и cut, но не могу схватить нужный столбец -
разделитель <TAB> - отсутствует, между столбцами число пробелов
переменное :(. Как-бы это попроще сделать, не углубляясь в дебри :)

Ответить   Tue, 21 Nov 2006 10:56:09 +0300 (#612278)

 

В сообщении от 21 ноября 2006 10:56 Хихин Руслан написал(a):

с помощью find и wc

find path \
\( -name '*.cpp' -o -name '*.h' -o -name '*.c' \) -print0 \
| xargs -0 wc --chars

Можно также подсчитать строки и слова :-)

Ответить   "Sergey B. Khvatov" Tue, 21 Nov 2006 11:33:20 +0300 (#612287)

 

В сообщении от 21 ноября 2006 16:56 Хихин Руслан написал(a):

Может du поможет...

Ответить   Tue, 21 Nov 2006 22:15:20 +0900 (#612382)