2016-03-06 64 views
0

我一直在使用谷歌搜索和嘗試不同的方法,但似乎沒有任何工作。似乎無法在shell中添加兩個數字

我有以下代碼

string=0 4 5 27 8 7 0 6 

total=0 

for n in "$string"; do 
total=$(($total + $n)) 
done 

這樣,我想算該字符串中的所有數字的總和。

我也試過expr "$total" + "$n",但這給了我一個錯誤,說操作數不是一個整數。

任何建議我如何做這項工作?

+0

嘗試在'for'循環的第一行添加'echo「 - > $ n」'來查看哪裏出了問題;-)另外,你確定你沒有收到錯誤那第一行? – Carpetsmoker

+0

echo $ n列出了所有的數字。爲什麼我會在第一行收到錯誤消息? – Daeto

+0

那麼,你想要什麼?因爲'$ total + 0 4 5 27 8 7 0 6'似乎不是你想要做的事情? – Carpetsmoker

回答

2

裏面不要引用的字符串in子句,引用的字符串不分爲wo rds:

#! /bin/bash 
total=0 
string='0 4 5 27 8 7 0 6' 
for n in $string ; do 
    ((total += n)) 
done 
echo $total 
+0

哦,訣竅!非常感謝 : ) – Daeto

1
string=0 4 5 27 8 7 0 6 

這試圖設置變量string0,然後調用與參數5 27 8 7 0 6命令4

您需要引用值:

string="0 4 5 27 8 7 0 6" 

而你需要的時候,你是指它刪除引號;改變

for n in "$string"; do 

for n in $string; do 
+0

試過了,沒有什麼區別。我通過運行「$(du -a」$ var「| cut -f1)」來存儲數字,如果這可能有點重要。 – Daeto

+0

@Daeto:我已經更新了我的答案。 –

+0

是的,謝謝你,上面的choroba說同樣的話。字符串上的引號是問題。 – Daeto

-1

你應該使用:

total=$((total + n)) 

無需對$變量之前$(())聲明

+1

是的,但它們是無害的。這並沒有回答這個問題。 –

+0

@誠然,說實話,我只讀過標題和給定的代碼,添加發生的地方..我雖然沒有問題不完全是標題說的!下次我會更加小心,謝謝 – bew

+1

@bew78規則一支持:永遠不要相信任何人要求支持聲明,因爲他們不能信任有關他們問題的事情。如果他們完全掌握了這種情況,他們就不會尋求幫助;-)總是要驗證並觀察上下文。 ;-) – Carpetsmoker