Shell的四则运算

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

(1)简单双括号法

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

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

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

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

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

$ for ((i=0; i<3; ++i)); do
>   echo $i
> done
0
1
2

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

(2)expr命令法

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

(3)let命令

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

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

$ echo $x
26
$ let "x += 2"
$ echo $x
29

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


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

(4)用bc计算器实现

$ x=8
$ y=`echo "scale=6; $x*3/7" | bc`
$ echo $y
3.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 $y
0

  试图将赋值的操作放到式子里面完成,结果失败了。为什么?因为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/hevakelcj/blog/181905

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值