Linux基礎------Shell數值計算的幾種方法
原文:http://blog.csdn.net/fu_wayne/article/details/21620639
在Linux下總會遇到數值計算問題,由於Linux下變量都屬於弱變量,沒有變量類型的概念(貌似腳本語言都是這樣)。
例如定義一個變量:x=1
此時的變量x默認是一個字符串,即使看着像一個數字,所以當嘗試用如下的方法去進行計算的時候,得到的結果卻不是想要的
echo $x+=1 ------------> 輸出:2+=1,並不是想要的結果2
Linux下有多種方法進行計算,一下摘錄幾例:
1.使用$[]
個人最常用的就是$[]方法進行計算,簡單方便,適合不太復雜的計算。
- x=1
- echo $[$x+=1]
輸出:2
2.使用expr
expr命令為Linux中的命令,一般用於整數值計算,但也可用於字符串操作。
使用格式:
expr var1 operator var2
例如:
- x=1
- expr $x + 4
輸出:5
注意:表達式之間的空格,注意只能進行整數運算,如果操作數不為整數,命令將會報錯。
此命令所有計算的結果會以整數形式返回,例如上述的表達式變為:expr $x / 4 ,其結果為1,結果已經自動進行了取整操作。
此命令所有計算的結果會以整數形式返回,例如上述的表達式變為:expr $x / 4 ,其結果為1,結果已經自動進行了取整操作。
3.使用(())
使用方法:((表達式1,表達式2,表達式3))
相比上面的兩種方法,(())這種方法略顯強大,它的強大之處在於:
1) 支持a++,a--操作(是不是找到C語言的感覺)
2) 支持多個表達式運算,各個表達式之間用“,”分開
3) 雙括號可以進行邏輯運算,四則運算
4) 雙括號結構 擴展了for,while,if條件測試運算
5) 在雙括號結構中,所有變量可以不加入:“$”符號前綴
- x=1
- ((y = x + 1,z = y + 1))
- echo $z
如果雙括號帶:$,將獲得表達式值,賦值給左邊變量
- a=10
- b=10
- total=$((a*b))
- echo $total
輸出:100
擴展流程控制語句(邏輯關系式)(摘自網絡)
- #!/bin/sh
- num=100;
- total=0;
- for((i=0;i<=num;i++));
- do
- ((total+=i));
- done
- echo $total;
- total=0;
- i=0;
- while((i<=num));
- do
- ((total+=i,i++));
- done
- echo $total;
- if((total>=5050));then
- echo "ok";
- fi
4.使用 let 命令
- var=1
- let "var+=1" 或 let var+=1 這種寫法運算符間不能有空格
- echo $var
- output:
- 2
使用方法:
let 表達式
注意:let必須是完整的算術表達式,即有等號兩邊