今天學習了一下在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