您的位置:首页 > 运维架构 > Shell

shell中的数学运算

2016-06-25 00:19 239 查看
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中的数学运算就没了,虽然计算功能还是很弱,但是也足够日常的使用了。毕竟平时你也不用泰勒展开,傅里叶变换,拉普拉斯变换的,对吧^_-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 数学计算