我可以通过以下方式读取数字和操作:
echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
但随后我所有添加数字的尝试都失败了:
case "$op" in
"+")
echo num1+num2;;
"-")
echo `num1-num2`;;
esac
跑步:
First number please
1
Second mumber please
2
Operation?
+
输出:
num1+num2
...或者...
echo $num1+$num2;;
# results in: 1+2
...或者...
echo `$num1`+`$num2`;;
# results in: ...line 9: 1: command not found
当我尝试添加添加(“2+2”而不是“4”)时,似乎我仍然得到字符串。
答案1
POSIX shell 中的算术$
用和 双括号完成(( ))
:
echo "$(($num1+$num2))"
您可以从中分配;另请注意,$
内部变量名称上的运算符(())
是可选的):
num1="$((num1+num2))"
还有expr
:
expr $num1 + $num2
在脚本编写中$(())
更可取,因为它避免了命令的分叉/执行expr
。
答案2
现有的答案是纯bash,所以它会比这更快,但它只能处理整数。如果需要处理浮点数,则必须使用外部程序bc
。
$ echo 'scale=4;3.1415+9.99' | bc
13.1315
scale=4
告诉我们bc
使用四位小数。请参阅man bc
获取更多信息。
答案3
您还可以使用$[ ... ]
结构。在这种情况下,我们使用 Bash 中内置的机制,它更快,使用起来更方便。由于我们知道 $[ 和 ] 之间的所有内容都被视为表达式,因此我们不需要在变量前面加上$
。同样,我们不需要避免*
将其视为一种模式。
num1=2
num2=3
echo $[num1 + num2]
5
答案4
极简主义者
total=0
((total+=qty))