2017-02-08 26 views
0

我想從一個文件中輸入並執行算術運算從文件以輸入,並使用bash命令

#!/bin/bash 
INPUT=menu.txt 
IFS="," 
[ ! -f $INPUT ] &while read ch ch1 menu rate quantity 
do 
echo "Choice : $ch" 
echo "Choice of menu : $ch1" 
echo "menu : $menu" 
echo "price : $rate" 
echo "quantity : $quantity" 
echo "$(($rate * $quantity))" 
done < $INPUT 

進行相加而執行此代碼,則拋出錯誤

Choice : veg
Choice of menu : soup
menu : corn soup
price : 160
quantity : 1
")syntax error: invalid arithmetic operator (error token is "

任何人都可以幫我解決這個問題嗎?

+0

使用命令替換「'」像 –

+0

你能在寫入整個語法更清楚我沒有得到它是什麼意思 –

回答

0

這很可能是因爲浮點運算。我假設rate變量是一個浮點數。因此,你需要這樣的:

echo "$rate * $quantity" | bc 
+0

在最後變量數量我按下的輸入按鈕也存儲如何刪除 –

+0

它理想情況下不會,它可能看起來像它,因爲你使用回聲而不是printf –

0

從裏面出錯誤信息,我猜你menu.txt文件是在DOS/Windows格式,即每行以回車和換行結束。像bash這樣的Unix工具預計只需要一個換行符(文本文件的unix格式)即可結束行,因此將回車符視爲行的一部分。在您的腳本中,這意味着變量quantity的編號爲,並且其中包含回車,並且回車表示它不是有效的編號,並且會導致錯誤。

有幾種方法可以解決這個問題。您可以在menu.txt文件上運行dos2unix(或類似的程序)。或者,您也可以使腳本修剪回車;一種方法是將回車添加到IFS,所以read命令將它視爲空白並修剪它。順便說一句,最好這樣做(以及將「,」分配給IFS)作爲read命令的前綴,因此它們僅適用於適用於該命令,並且不會在其他地方搞砸:

[ ! -f $INPUT ] &while IFS=$',\r' read ch ch1 menu rate quantity 

此外,該測試看起來很落後。如果輸入文件不存在存在,你真的想運行循環嗎? &的使用使得它很難閱讀;它會是最好使用一個明確的if(與雙引號的變量引用),就像這樣:

if [ -f "$INPUT" ]; then 
    while IFS=$',\r' read ch ch1 menu rate quantity; do 
     ... 
相關問題