Shell的四则运算

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

(1)简单双括号法

  用两层括号将计算式子包括起来,就能够进行计算了。 shell

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

  在双括号里,变量不须要加$符号。双括号里的计算结果是能够返回的。 学习

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

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


  

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




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

(2)expr命令法

  用expr命令,能够完成与或非、加减乘除、大小等于与字串的计算。这里很少说,本身去man htm

(3)let命令

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

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

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



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

  Shell自己不支持浮点运算,若是须要进行浮点计算,能够使用下面两种方法: for循环

(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

相关文章
相关标签/搜索