2010-06-26 104 views
5

我在編寫腳本時遇到了一些問題......如果有人能幫助我,那將是非常好的!shell腳本的算術問題

我的腳本有:

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

而且我得到這個錯誤:

./calc_serv_demand.sh: line 12: 0.0895406: syntax error: invalid arithmetic operator (error token is ".0895406")

有人能幫助我嗎?

我認爲這是因爲bash只能用於整數...但我需要使用浮點值。

由於事先


問題解決了:

VISITS = $(回聲$ WR + $ RD | BC); echo $ VISITS

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

回答

5

您可以使用bc做你的浮點計算,即

echo $WR + $RD | bc 

等。

+0

HUm ... 它適用於總和,它不適用於乘法。 這很奇怪,因爲我檢查了BC手冊,它應該工作! 看一看: 我的腳本: echo $ WR + $ RD | bc&>訪問; VISITS = $(echo $ WR + $ RD | bc); #正常工作 echo $ VISITS SERVICE_DEMAND = $(echo $ VISITS * $ SERVICE_TIME | bc); #返回一個奇怪的錯誤 回聲$ SERVICE_DEMAND 錯誤: 0.0895406 3.42007 12.401 3.5096106 (standard_in)1:語法錯誤 (standard_in)1:非法字符:K (standard_in)1:非法字符:H (standard_in)1:非法字符:T ... – Alucard 2010-06-26 16:22:51

+0

@user:由於'*'對shell有特殊含義,所以你必須寫'\\ *'或''*''。 此外,您應該直接將計算結果分配給一個變量,而不是輸出到文件:'VISITS = $(echo $ WR + $ RD | bc)'。 – 2010-06-26 16:31:14

+0

@ user368453:如果您對'*'執行'echo',它將顯示當前目錄中的所有文件名。只需在公式周圍加上引號,它就會起作用:'SERVICE_DEMAND = $(echo「$ VISITS * $ SERVICE_DEMAND」| bc)' – 2010-06-26 16:32:57

1

您必須使用外部程序(如bc)才能在腳本中執行浮點運算。

是這樣的:

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

2

要的精度設置(的答案的位數的小數點的右邊), 寫:

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)分配給您的變量。

+0

感謝 但是...... 它返回以下錯誤: (standard_in)2:語法錯誤 – Alucard 2010-06-26 16:32:08

+0

我只是跑這再次GNU的bash,版本4.0.35(1)-release(i586系統,SUSE -linux-gnu) – 2011-06-16 17:07:28

+0

Alucard,也許你的剪切和粘貼引入了\ r \ n。在你的副本上試試dos2unix scriptname。 – 2011-06-16 17:15:24

3

而不是使用bc,考慮切換到更好的編程語言。 Bash根本不適合數學。