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

相關文章
相關標籤/搜索