Сложение в командной строке

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
sav
рядовой
Сообщения: 17
Зарегистрирован: 2008-07-31 15:17:39

Сложение в командной строке

Непрочитанное сообщение sav » 2010-05-17 8:13:15

Если спрашивали, извините, не нашел.

в bash есть возможность сложения в командной строке:

Код: Выделить всё

$ $((1+1))
-bash: 2: команда не найдена
а sh меня посылает и пишет

Код: Выделить всё

Неверное имя переменной.
Подскажите пожалуйста, как провернуть такое сложение в sh?
Не познав сущности предмета, человек может в совершенстве им овладеть!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Reiser
рядовой
Сообщения: 22
Зарегистрирован: 2010-04-21 17:28:07

Re: Сложение в командной строке

Непрочитанное сообщение Reiser » 2010-05-17 8:34:05

Как минимум в http://www.lissyara.su/doc/programming/shell/ было про арифметические операции. Прямо команду не помню.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Сложение в командной строке

Непрочитанное сообщение terminus » 2010-05-17 8:45:54

Код: Выделить всё

echo $((1+1))
:Search:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
sav
рядовой
Сообщения: 17
Зарегистрирован: 2008-07-31 15:17:39

Re: Сложение в командной строке

Непрочитанное сообщение sav » 2010-05-17 8:56:04

Код: Выделить всё

# echo $((1+1))
Неверное имя переменной.
2 Reiser
Спасибо, нашел
примерно то что надо

Код: Выделить всё

# `expr 20 + 1`
21: Команда не найдена.
Не познав сущности предмета, человек может в совершенстве им овладеть!

Гость
проходил мимо

Re: Сложение в командной строке

Непрочитанное сообщение Гость » 2010-05-17 14:19:44

sav писал(а):а sh меня посылает и пишет

Код: Выделить всё

Неверное имя переменной.
Подскажите пожалуйста, как провернуть такое сложение в sh?
оно работает и в ash (в freebsd он называется /bin/sh). Ты сначала его запусти. Наверное, по дефолту сидишь в tcsh, вот тя он и посылает.

Reiser
рядовой
Сообщения: 22
Зарегистрирован: 2010-04-21 17:28:07

Re: Сложение в командной строке

Непрочитанное сообщение Reiser » 2010-05-23 12:08:01

Потому что надо

Код: Выделить всё

echo `expr 20 + 1`
, а команды 21 он действительно не знает.

Гость
проходил мимо

Re: Сложение в командной строке

Непрочитанное сообщение Гость » 2010-05-23 18:12:31

expr это внешняя команда, let/exp - внутренние

Код: Выделить всё

> sh
$ type expr let exp
expr is /bin/expr
let is a shell builtin
exp is a shell builtin
$ echo $((1+1))
2
$ let 1+1
2
$ while [ $((i+=1)) -le 10 ]; do echo $i; done
1
2
3
4
5
6
7
8
9
10
на вызов внешних команд расходуется больше ресурсов

Код: Выделить всё

$ sh -c 'while [ ${i:=1} -le 9999 ]; do i=`expr $i + 1` ;echo $i; done >/dev/null; times'
0m0.151s 0m1.000s
0m2.683s 0m7.726s

$ sh -c 'while [ $((i+=1)) -le 9999 ]; do echo $i; done >/dev/null; times'
0m0.046s 0m0.015s
0m0.000s 0m0.000s

$ sh -c 'for i in $(jot - 1 9999); do echo $i; done >/dev/null; times'
0m0.014s 0m0.000s
0m0.004s 0m0.000s
разница заметна? jot(1) тоже внешняя команд, но она может быть эффективнее в качестве простого счетчика с большим кол-вом елементов. Для маленкого кол-ва перевес лишниго форка будет легче заметен.