原生bash不支持简单的数学运算,即使是最简单的加减乘除
但是,可以使用$[]和expr来实现整数运算
如果要实现小数运算,可以使用bc命令
使用$[]来实现:
#!/bin/bash #文件名:test.sh echo $[ 1 + 3 ] echo $[ $1 + $2 ] echo $[ $1 - $2 ] echo $[ $1 * $2 ] #此时不用对*转义 echo $[ $1 / $2 ] echo $[ $1 % $2 ]
执行脚本:
ubuntu@ubuntu:~$ ./test.sh 10 20 4 30 -10 200 0 10 ubuntu@ubuntu:~$
主要注意的是:
1、运算符和两边要进行计算的数值之间,有空格
2、虽然两个方括号和要进行计算的数值之间可以没有空格,但是强烈建议增加一个空格,因为后面会学到很多时候,方括号和参数之间都有空格。
使用expr实现:
#!/bin/bash #文件名:test.sh #expr是一个用于数值计算的命令 #此时运算符号两边必须加空格,不加空格会原样输出,不会计算 expr 1 + 3 #命令行第2个参数和第3个参数求和 expr $1 + $2 expr $1 - $2 expr $1 * $2 #失败 expr $1 * $2 #因为乘号*在shell中有特殊的含义,所以要转义 expr $1 / $2 #除法取商 expr $1 % $2 #除法取模
运行脚本:
ubuntu@ubuntu:~$ ./test.sh 10 20 4 30 -10 expr: syntax error 200 0 10 ubuntu@ubuntu:~$
使用expr之前先了解一下反引号``的功能,反引号的功能是将反引号括起来的内容执行,没错,就是执行,这就意味着,反引号括起来的是一条命令,此时是一个命令的运行结果,而结果就是一条命令,并且反引号不能单独使用,要将包含反引号及其括起来的语句赋值给一个变量,否则出错;如果不想将其赋给一个变量,就不要用反引号,直接写反引号中的内容,因为其内容就是一条命令。
#!/bin/bash #文件名:test.sh #此时运算符号两边必须加空格 #必须将反引号中命令的结果赋给一个变量 num=`expr 1 + 3` echo $num #命令行第2个参数和第3个参数求和 num=`expr $1 + $2` echo $num #乘法运算符仍要转义 num=`expr $1 * $2` echo $num
运行脚本:
ubuntu@ubuntu:~$ ./test.sh 10 20 4 30 200 ubuntu@ubuntu:~$
使用bc进行浮点数计算
ubuntu@ubuntu:~$ echo 1.4*4 | bc #乘号和运算数之间没有空格时,不用转义 5.6 ubuntu@ubuntu:~$ echo 1.4 * 4 | bc #乘号和运算数之间有空格时,必须转义 5.6 ubuntu@ubuntu:~$ echo 1.5-4 | bc -2.5
鉴于计算时很难记错,运算符之间是否要加空格,统一推荐加,如果是乘号*,则转义。