2011-08-26 72 views
0

這是我的操作系統類的作業... 該程序將一個數字中的所有數字相加,然後返回例如123 1 + 2 + 3 = 6 我在for語句中有一個錯誤,但我不知道我在做什麼錯誤...請幫忙!在shell中循環

#!/bin/sh 
read number 
len=${#number} 
cont=0 
for((i = 0 ; i < $len; i++)) 
do 
    cont=expr `$cont + number%10` 
    number=`$number/10` 
done 
echo "$cont" 

終端給我的錯誤./ej.sh:5:語法錯誤:壞的循環變量

+1

什麼版本的bash?你嘗試使用'#!/ bin/bash'嗎? –

+0

Shell語言對空白非常敏感。別忘了,你正在執行命令,而不是C-ish函數。 –

回答

1

1)寫家當中的/ bin/bash的

2)你不」噸需要在表達

3)美元符號,你應該換整個EXPR在反引號

#!/bin/bash 
read number 
len=${#number} 
cont=0 
for ((i = 0 ; i < len; i++)); do 
    cont=`expr $cont + $number % 10` 
    number=`expr $number/10` 
done 
echo "$cont" 
+0

好主意使用'$()'而不是反引號:更容易嵌套,並更容易看到。 –

+0

甚至不需要'expr' :) – ghostdog74

+0

@ ghostdog74,是的,你可以做一些像'((cont = cont + number%10))'。我只想強調原始代碼的關鍵問題 –

0

你沒有提及它是否純粹bash或不

$ echo "1234"|sed 's/\(.\)/\1+/g;s/\+$//' | bc 
10