#!/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"
Run Code Online (Sandbox Code Playgroud)
这是我的代码家伙。我收到一堆 expr 语法错误。我正在使用 bash shell。谢谢!
您的错误是由=分配中的空格引起的,以下替换应该有效(我更喜欢$()使用反引号,因为它们更容易嵌套):
s=0
r=$(expr $a % 10)
s=$(expr $s + $r)
a=$(expr $a / 10)
Run Code Online (Sandbox Code Playgroud)
例如,s = 0(带有空格)不会将变量s设置为零,而是尝试s使用两个参数=和0.
但是,实际上并没有必要调用外部expr1来进行数学运算并将输出捕获到变量中。这是因为bash本身就可以做到这一点不够好,而不诉诸输出捕获(见ARITHMETIC EVALUATION的bash手册页):
#!/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"
Run Code Online (Sandbox Code Playgroud)
你会注意到我做了一些其他的小改动,我相信这些改动提高了可读性,但是如果你愿意,你可以恢复到你的原始代码,只需使用((expression))方法而不是expr.
1如果您不介意调用外部可执行文件,则不需要在 中循环bash,您可以使用更隐蔽的方法:
#!/bin/bash
clear
read -p "Enter a number: " number
echo "Sum of digits is $(grep -o . <<<$number | paste -sd+ | bc)"
Run Code Online (Sandbox Code Playgroud)
但是,老实说,我想我更喜欢可读的解决方案:-)
| 归档时间: |
|
| 查看次数: |
19980 次 |
| 最近记录: |