2016-07-21 48 views
0
#! /bin/bash 
sum=0 
for number in $* 
do 
    x=$((sum + number)) 
    echo $x 
done 

我只是試圖創建一個名爲「add」的腳本,它將在執行時添加位置參數。它不是添加數字,而是簡單地將它們顯示爲循環。例如。無法弄清楚如何在bash循環中執行算術(for)

$ add 1 2 3 4 5 6 
1 
2 
3 
4 
5 
6 

我在做什麼錯了?

+0

順便說一句,'爲$ *號'通常是一個代碼嗅覺 - 它會讓你陷入帶有空白的條目的麻煩,條目可以被解釋爲球體,在其他情況下。除非你有一個很好的理由否則,使用'數字;在「$ @」中輸入「或」號碼; (這兩者完全相同)。另請參閱http://shellcheck.net/,它會自動爲您檢測。 –

回答

2

您從不更新sum。你的意思是?

sum=0 
for number in "[email protected]"; do 
    sum=$((sum + number)) 
    echo "$sum" 
done 

(該echo $sum進入外循環,如果你只想要一個最後的總和,而不是運行總計,寫到標準輸出。)

+0

完美的工作,我曾嘗試更新總和之前,但我認爲我在算術括號內使用$。非常感謝你。 –

+0

'$((...))'內'sum'和'$ sum'唯一的區別是前者默認爲0,如果它是未定義的,而後者導致語法錯誤。 – chepner

+0

+1。另外,我很好奇:在什麼情況下'$ sum'導致'$((...))'內出現語法錯誤?我測試了'unset x; echo $(($ x + 1))',它只返回'1'。 – John1024