Linux之Shell的算術運算

來源:本站原創 Linux 超過300 views圍觀 0條評論

在Bash的算術運算中有以下幾種方法:
名稱                語法                    范例
算術擴展            ((算術式))r=<?XML:NAMESPACE PREFIX = "[default] http://www.w3.org/1998/Math/MathML" NS = "http://www.w3.org/1998/Math/MathML" />((算術式))r=((1+2*3))
使用外部程序expr    expr 算術式              r=`expr 1+2*3`
使用[][][算術式]                r=$[1+2]
使用內置命令        declare -i 變量=算術式    declare -i r=1+2*3
使用內置命令let     let 算術式                let r=1+2

i++運算后加1,i–運算后減1
++i運算前加1,–i運算前減1

一、算術擴展
算術擴展的語法是:((表達式)),如果表達式中有變量,該變量之前最好不要加((表達式)),如果表達式中有變量,該變量之前最好不要加這個符號,以免變量不存在造成語法錯誤,例:
unset i
echo ((2+((2+i))
由于變量i不存在,所以會變成 echo ((2+)),這樣語法就錯誤了。但如果寫成echo((2+)),這樣語法就錯誤了。但如果寫成echo((2+i)),((2+i))是一個合法的算術式,就算變量不存在,仍可正確計算。
a=5
a=$((++1)) a的值加1后,在賦值給a
a=$((–1)) a的值減1后,在賦值給a
a=$((3+a–))運算后減1
二、使用外部程序expr做算術運算
外部程序expr本來的作用,是在“標準輸出”顯示表達式的值。這個是外部程序,和Shell沒有關系,所以移植性非常好,
如果注重跨平臺,那么可以在腳本本使用expr代替其他算術表達式。

expr 3 + 4  
它會在屏幕上顯示7,注意"+"兩邊有空格。
在使用expr時,要特別"表達式"中是否包含shell的特殊字符,如*、|、<、>、!、&、(、),要使用"\"來轉義。
1、r=`expr 參數1 \|參數2`
|代表"或"之意.如果”參數1“存在、非空、不是0,則傳回”參數1“的值,否則傳回"參數2"的值。
r=`expr 3 \| 0` r的值為3
r=`expr 0 \| 2` r的值為2
2、r=`expr 參數1 \&參數2`
如果"參數1"和"參數2"都存在、非空、不是0,則傳回"參數1"的值,否則傳回0.
r=`expr 3 \& 0` r的值為0
3、比較
算術            是否成立    r的值
r=`expr 1 \< 2`      是        1 
r=`expr 3 \<= 2`     否        0 
r=`expr 2 \= 2`      是        1 
r=`expr 3 \!= 2`     是        1 
r=`expr 3 \>= 2`     是        1 
r=`expr 3 \> 2`      是        1 
4、加
r=`expr 4 + 5` r的值為9
5、減
r=`expr 3 – 5` r的值為-2
6、乘
r=`expr 3 \* 5` r的值為15
7、除
r=`expr 32 / 5` r的值為6(余數無條件舍去)
8、乘方
expr沒有乘方的功能
9、求余數
r=`expr 32 % 5` r的值為2
10、計算字符串長度
r=`expr length "hello"`  r的值為5
三、用$[]做算術運算
使用[]做算術運算和[]做算術運算和(())類似
加:r=[4+5]r的值為9減:r=[4+5]r的值為9減:r=[4-5]    r的值為-1
乘:r=[4?5]r的值為20除:r=[4?5]r的值為20除:r=[5/2]    r的值為2
余數:r=[5[5[2**3] r的值為8

四、使用declare、let做算術運算
declare為bash shell的內置命令。
declare -i I
I=5+4 
echo $I 
因為I事先被定義為整數(算術運算),所以$I的值為9,而不再是字符串5+4
當被定義為整數后,便可以進行加、減、乘、除..等操作
五、用let做算術運算

let為bash shell的內置命令。

let I=8+4*5
echo $I 
此時輸出的值為28
let表明后邊的直接說一個算術式。
也可使用空格符讓表達式可讀性高一點,但這時必須使用引號包括表達式才行。
let "i = i + 5"

本文出自 “生命不息,奮斗不止!” 博客,請務必保留此出處

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文鏈接:http://www.qdxgqk.live/?p=3920轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
?
?
萌宠夺宝游戏