今天学习了一下在Shell里进行四则运算的方法。 html
用两层括号将计算式子包括起来,就能够进行计算了。 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 |
用expr命令,能够完成与或非、加减乘除、大小等于与字串的计算。这里很少说,本身去man htm
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循环
$ 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: $
c=$(awk 'BEGIN{print 7.01*5-4.01 }')
参考网页:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839556.html