shell中数学运算分为两类:逻辑运算和数值运算。
有以下两种方式调用数学计算:
expr expression
result=$[expression]
- 逻辑运算:& | < > = != <= >=
这和在其他的语言中的逻辑运算是一样的,为真则返回1,为假则返回0
expr 5 < 7
会报错,因为bash会将<视为重定向符号,因此需要转义
expr 5 \< 7
返回1
也可以
result=$[5 < 7]
这里就可以不使用转义符号
在进行等于比较时两种方式具有较大的不同:
#这里加上空格并不是必须的
result=${5 == 7]
#注意等号前后要加空格 不然会认为是字符串连接
expr 5 = 5
2.数值运算
#同理,使用expr进行数值运算,也需要加上转义符号
expr 1 \+ 2
#因此大多数情况下是运用$[ ]
result=$[1 + 2]
但是整型数据运算结果只能得到整型结果,小数会被截断,因此需要进行浮点运算时要使用内建计算器bc。bc能够识别整型,浮点型,变量,注释,表达式,编程语句以及函数。
不想看到欢迎条 使用-q参数
bc -q
#可以进行整型计算
1+2
3
#默认scale是0,即保留0位小数
1.0/2
0
#将scale改为2,计算结果既可以得到两位小数
scale=2
1.0/2
.50
100/3
33.33
#按quit退出
也可以使用变量(退出bc时scale重新设置为0):
bc -q
num1=1
num2=2
num1+num2
3
num1/num2
0
scale=2
num1/num2
.50
quit
在脚本中进行简单的浮点运算也可以通过管道命令:
#通过反引号得到命令返回值
result=`echo "scale=2;1/2" | bc`
echo $result
.50
进行复杂点的运算可以这样(输入重定向的使用):
num1=12.21
num2=21.12
result=`bc << EOF
> scale=2
> a = $num1 * $num2
> b = $num1 / $num2
> a+b
> EOF
> `
echo $result
258.44
至此,shell中的数学运算就没了,虽然计算功能还是很弱,但是也足够日常的使用了。毕竟平时你也不用泰勒展开,傅里叶变换,拉普拉斯变换的,对吧^_-