如何用 bash 添加(减去等)两个数字?

如何用 bash 添加(减去等)两个数字?

我可以通过以下方式读取数字和操作:

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))

相关内容