1
#!/bin/bash
clear 
echo "Enter a number"
read a 
s = 0
while [ $a -gt 0 ]
do
r = ` expr $a % 10 `
s = ` expr $s + $r `
a = ` expr $a / 10 `
done
echo "sum of digits is = $s"

これは私のコードです。大量の expr 構文エラーが発生しています。私はbashシェルを使用しています。ありがとう!

4

1 に答える 1

5

=あなたのエラーは、代入で を囲むスペースが原因で発生し$()ます。

s=0
r=$(expr $a % 10)
s=$(expr $s + $r)
a=$(expr $a / 10)

たとえば、s = 0(スペースを使用して)変数をゼロに設定するのではなく、2 つの引数を指定しsてコマンドを実行しようとします。s=0

ただし、外部1を呼び出して数学的操作を行い、出力を変数にキャプチャする必要はありません。これは、出力キャプチャに頼らなくても、それ自体でこれを十分に実行できるためです ( man ページを参照)。exprbashARITHMETIC EVALUATIONbash

#!/bin/bash
clear
read -p "Enter a number: " number
((sum = 0))
while [[ $number -gt 0 ]]; do
    ((sum += number % 10))
    ((number /= 10))
done
echo "Sum of digits is $sum"

読みやすさを向上させると思われるその他の小さな変更をいくつか行ったことに気付くでしょうが、必要に応じて元のコードに戻って、((expression))ではなくメソッドを使用することができますexpr


1外部実行可能ファイルの呼び出しをにしない場合は、 でループする必要はありませんbash。代わりに、より卑劣な方法を使用できます。

#!/bin/bash
clear
read -p "Enter a number: " number
echo "Sum of digits is $(grep -o . <<<$number | paste -sd+ | bc)"

しかし、残酷に正直に言うと、私は読みやすい解決策を好むと思います:-)

于 2015-05-28T04:11:09.300 に答える