Арифметическая проблема со сценарием оболочки

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

Мой сценарий имеет:

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

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

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

Кто-то может помочь мне?

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

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


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

$ VISITS= (повторяют $WR + $RD | до н.э); $VISITS эха

$ SERVICE_DEMAND= (повторяют $VISITS '*' $SERVICE_TIME | до н.э); $SERVICE_DEMAND эха

5
задан Alucard 26 June 2010 в 16:39
поделиться

5 ответов

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

echo $WR + $RD | bc

и так далее.

5
ответ дан 18 December 2019 в 14:42
поделиться

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

2
ответ дан 18 December 2019 в 14:42
поделиться

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

3
ответ дан 18 December 2019 в 14:42
поделиться

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

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

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

2
ответ дан 18 December 2019 в 14:42
поделиться

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

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

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

1
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: