2013-05-26 103 views
3

編寫一個bash腳本,該腳本添加其命令行參數並顯示結果。假設命令行參數是除參數本身以外的所有整數。計算命令行參數的總和並顯示結果

因此,例如:

% addprogram 2 5 7 
The total is 14 

我已經嘗試了所有的,我好像無法在網絡上找到什麼,請保持答案很簡單。

我試過的東西,如:

#!/bin/bash 

total += [email protected] 

但我不認爲運營商在bash存在。

我的算法是這樣的:

  1. 對於從命令行傳遞的參數,
  2. 的第一個參數添加到總,
  3. 移動到下一個參數,並添加到總,
  4. 重複只要有爭論
  5. 總產量
+2

寫的StackOverflow問題並不像你粘貼在你的功課,根本沒讀什麼(「似乎無法找到任何」 ==「谷歌沒在前5次結果中不會給我一個腳本「),並不是那麼微不足道,以至於不瞭解這一點會嚴重阻礙你接下來的任務。你是不是被一個壓迫性的極權主義技術專家帶走了這個課程? – msw

回答

4

POSIX兼容的版本:

for i do 
    sum=$(expr $sum + $i) 
done 
echo $sum 

備註默認for迭代[email protected]

2

是這樣的嗎?

for n in [email protected] 
do 
    let sum=$sum+$n 
done 
echo The total is $sum 
+0

謝謝你完美的作品!我錯過了'讓'在我有... – classA

0

按照您提供的步驟,shiftexpr

sum=0 
while [ -n "$1" ]; do 
    sum=`expr $sum + $1` 
    shift 
done 
echo $sum 
+0

感謝你也是,這一個也是一個魅力!我看到了'expr',但我不確定如何使用它。哪一個答案是最正確的? – classA

+0

@classA所有這些看起來都是正確的,當你可以選擇最適合你的解決方案時,你處於一個非常舒適的狀態:) –

0

我會做這樣的:

total=0 

for i in [email protected]; do 
    ((total+=i)) 
done 

echo "The total is $total" 
+0

謝謝你這個作品完美!哪一個更正確?上面這個還是這個呢? – classA

+0

AFAICS迄今爲止提供的所有解決方案都是正確的,因此您應該選擇一個您最熟悉的解決方案並[接受該答案](http://meta.stackexchange.com/a/5235)。 –

1

我喜歡awk,所以我會做這樣的:

echo [email protected] | tr ' ' '\n' | awk '{sum+=$0}END{print sum}' 

而一個純bash的版本可以去像:

echo [email protected] | tr ' ' '\n' | (sum=0; while read; do sum=$((sum+REPLY)); done; echo $sum) 
6

因爲沒有人這麼做過

IFS=+ 
bc<<<"$*" 

使用bc讓你高貴;當數字很大時,shell內置算法會失敗。

expr可能會也可能不會這樣做,這取決於它是否是最近的GNU coreutils版本。

IFS<<<只是使其縮短的技巧。更可以理解的版本將是

echo $* | sed 's/ /+/g' | bc 
+0

這是很酷的黑客解決方案。 +1。請記住恢復IFS,或者在'('subshel​​l')'中運行它。 –