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

Mic*_*ant 143 scripting bash variable

我可以读取数字和操作:

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
Run Code Online (Sandbox Code Playgroud)

但随后我所有添加数字的尝试都失败了:

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac
Run Code Online (Sandbox Code Playgroud)

跑:

First number please
1
Second mumber please
2
Operation?
+
Run Code Online (Sandbox Code Playgroud)

输出:

num1+num2
Run Code Online (Sandbox Code Playgroud)

...或者...

echo $num1+$num2;;

# results in: 1+2    
Run Code Online (Sandbox Code Playgroud)

...或者...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found
Run Code Online (Sandbox Code Playgroud)

当我尝试添加添加(“2+2”而不是“4”)时,似乎我仍然得到字符串。

gol*_*cks 206

POSIX shell 中的算术是用$双括号完成的(( ))

echo "$(($num1+$num2))"
Run Code Online (Sandbox Code Playgroud)

你可以从中分配; 还要注意$里面变量名的操作符(())是可选的):

num1="$((num1+num2))"
Run Code Online (Sandbox Code Playgroud)

还有expr

expr $num1 + $num2
Run Code Online (Sandbox Code Playgroud)

在脚本中$(())更可取,因为它避免了expr命令的 fork/execute 。

  • 请注意,您可以在表达式中编写“var”而不是“$var”(不需要“$”前缀):“echo $(( num1 + num2 ))” (3认同)
  • 或者甚至直接`echo $(($num1$op$num2))`而不涉及`case`。 (2认同)
  • 不,但是您使用了文字 `+`,因此需要在外部使用 `case` 来单独处理减法。 (2认同)

evi*_*oup 16

现有的答案是纯 bash,所以它会比这更快,但它只能处理整数。如果需要处理浮点数,则必须使用外部程序bc

$ echo 'scale=4;3.1415+9.99' | bc
13.1315
Run Code Online (Sandbox Code Playgroud)

scale=4通知bc用四位小数。有关man bc更多信息,请参阅。


jed*_*edi 8

您也可以使用$[ ... ]结构。在这种情况下,我们使用 Bash 中内置的 mechanizm,它更快,使用起来更方便一些。由于我们知道 $[ 和 ] 之间的所有内容都被视为表达式,因此我们不需要在变量前面加上$。同样,我们不需要确保*将其视为一种模式。

num1=2
num2=3
echo $[num1 + num2]
5
Run Code Online (Sandbox Code Playgroud)


小智 5

echo `expr $a + $b`   
echo `expr $a - $b`   
echo `expr $a \* $b`   
echo `expr $a / $b`   
Run Code Online (Sandbox Code Playgroud)

注意\*(乘法)之前,整个表达式必须在反引号内。