Арифметическая задача со скриптом оболочки - PullRequest
5 голосов
/ 26 июня 2010

У меня есть некоторые проблемы со сценариями ... если бы кто-то мог мне помочь, это было бы очень хорошо!

Мой скрипт имеет:

VISITS=$((WR + RD));
SERVICE_DEMAND=$((VISITS*SERVICE_DEMAND));

И я получаю эту ошибку:

. / Calc_serv_demand.sh: строка 12: 0.0895406: синтаксическая ошибка: неверный арифметический оператор (токен ошибки ».0895406" )

Может ли кто-нибудь мне помочь?

Я думаю, это потому, что bash работает только с целыми числами ... Мне нужно использовать значения с плавающей точкой.

спасибо заранее


Проблема решена:

VISITS = $ (echo $ WR + $ RD | bc); echo $ VISITS

SERVICE_DEMAND = $ (echo $ VISITS '*' $ SERVICE_TIME | bc); echo $ SERVICE_DEMAND

Ответы [ 5 ]

5 голосов
/ 26 июня 2010

Вы можете использовать bc для выполнения вычислений с плавающей запятой, т.е.

echo $WR + $RD | bc

и т. Д.

3 голосов
/ 26 июня 2010

Вместо использования bc рассмотрите возможность перехода на лучший язык программирования. Bash просто не подходит для математики.

2 голосов
/ 26 июня 2010

Чтобы установить точность (количество цифр ответа справа от десятичной запятой), напишите:

WR=5
RD=7
VISITS=$[WR+RD]
SERVICE_DEMAND=.0895406
SERVICE_DEMAND=`echo "scale=5; $VISITS * $SERVICE_DEMAND" |bc -l`
echo Service Demand = $SERVICE_DEMAND

Это выдает:

Service Demand = 1.0744872

масштаб = 5 устанавливает 5 цифр точности;обратные кавычки заставляют оценивать содержащееся выражение и присваивать выходную переменную (из bc -l ).

2 голосов
/ 26 июня 2010

Используйте bc для выполнения вычислений с плавающей запятой в Bash .

1 голос
/ 26 июня 2010

Вам придется использовать внешнюю программу, например bc, для выполнения математических операций с плавающей точкой в ​​ваших сценариях.

Что-то вроде:

echo ($WR+$RD)*$SERVICE_DEMAND | bc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...