博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell的四则运算
阅读量:6834 次
发布时间:2019-06-26

本文共 1145 字,大约阅读时间需要 3 分钟。

hot3.png

今天学习了一下在Shell里进行四则运算的方法。

(1)简单双括号法

  用两层括号将计算式子包括起来,就可以进行计算了。

$ a=10$ ((a+=23))$ echo $a33

  在双括号里,变量不需要加$符号。双括号里的计算结果是可以返回的。

$ x=23$ y=$(((x-10)*3))$ echo $y39

  注意:如果要输出结果,双括号前面要加$符号。 

  

$ for ((i=0; i<3; ++i)); do>   echo $i> done012

 有了上面的for循环式子,再也不用笨拙地用while计算了。

(2)expr命令法

  用expr命令,可以完成与或非、加减乘除、大小等于与字串的计算。这里不多说,自己去man

(3)let命令

  let命令的用几乎与方法(1)一样。只不过,let 后跟的是双引号括起来的表达式。表达式中的变量不需要加$符号。

 let "x = x + (y / 2)"  <==> (( x= x+ (y / 2) ))

$ echo $x26$ let "x += 2"$ echo $x29

  与双括号方式相比,let命令没有返回结果。赋值操作在表达式内部完成。

  Shell本身不支持浮点运算,如果需要进行浮点计算,可以使用下面两种方法:

(4)用bc计算器实现

$ x=8$ y=`echo "scale=6; $x*3/7" | bc`$ echo $y3.428571

  解释一下,其中scale=6是在设置bc的小数点精度。其中的$x将会被shell替换成8,最后变成:

echo "scale=6; 8*3/7" | bc

可以看出,这个计算方法并不太灵活。我们把上面的命令换成:

$ y=0$ echo "scale=6; y=$x*3/7" | bc$ echo $y0

试图将赋值的操作放到式子里面完成,结果失败了。为什么?因为bc在对式子进行运算过程时,发现了式子中的y,则会在内部分配一块空间。所以这里的y不是shell里的y,而是bc里的。

  注意:不要将双引号换成了单引号。因为用了单引号$x则无法被解释,作为字串带入了bc,而bc又不认识这个。

$ echo 'scale=6; $x*3/7' | bc(standard_in) 1: illegal character: $

(5)使用awk内部的计算方法。(不是很提倡)

c=$(awk 'BEGIN{print 7.01*5-4.01 }')

参考网页:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839556.html

转载于:https://my.oschina.net/u/140462/blog/659664

你可能感兴趣的文章
关于preempt_enable 和 preempt_disable 【转】
查看>>
[SDK2.2]Windows Azure Virtual Network (1) 概念
查看>>
SQLAlchemy 与 fask-SQLAlchemy 中的多表查询例子
查看>>
JS 获取图片原始尺寸-防止图片溢出
查看>>
Java反射
查看>>
Codeforce 712A Memory and Crow
查看>>
Keil代码中for循环延时问题
查看>>
JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构
查看>>
ArcGIS制图之Subset工具点抽稀
查看>>
很好看的后台管理界面
查看>>
Maven 使用Eclipse构建Web项目
查看>>
用户密码加密存储十问十答,一文说透密码安全存储
查看>>
IL指令详细
查看>>
parted空闲空间添加分区
查看>>
Nginx 作为反向代理优化要点proxy_buffering
查看>>
折腾大半年,西部数据终于收购了东芝半导体业务
查看>>
http长连接和短连接
查看>>
送上最新鲜的互联网行业新闻-【2015-05-12】
查看>>
印花税下调,今天股市上涨概率很大
查看>>
如何描述一张数据表的基本信息?
查看>>