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 。
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更多信息,请参阅。
您也可以使用$[ ... ]结构。在这种情况下,我们使用 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)
注意\在*(乘法)之前,整个表达式必须在反引号内。