2011-08-26 16 views
0

これは私のOperative Systemsクラスの宿題です。 このプログラムは、数値からすべての桁を合計し、合計を返します。 123 1 + 2 + 3 = 6 for文にエラーがありますが、私が間違っていることが分かりません...助けてください! 5:構文エラー:for loop in 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を与えるループ変数

+1

bashのバージョンは? '#!/ bin/bash'を使ってみましたか? –

+0

シェル言語は空白に非常に敏感です。 C-ish関数ではなく、コマンドを実行していることを忘れないでください。 –

答えて

1

1)ビン/としてシェバングを書く/ bashの

2)あなたは「ドンのために悪いですtはあなたがバッククォートで全体の式exprをラップする必要があります表現

3)にドル記号が必要

#!/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