Shell(())實現對整數進行數學運算
雙小括號 (( )) 是 Bash Shell 中專門用來進行整數運算的命令,它的效率很高,寫法靈活,是企業運維中常用的運算命令。
註意:(( )) 隻能進行整數運算,不能對小數(浮點數)或者字符串進行運算。後續講到的 bc 命令可以用於小數運算。
Shell (( )) 的用法
雙小括號 (( )) 的語法格式為:
((表達式))
通俗地講,就是將數學運算表達式放在((和))之間。
表達式可以隻有一個,也可以有多個,多個表達式之間以逗號,分隔。對於多個表達式的情況,以最後一個表達式的值作為整個 (( )) 命令的執行結果。
可以使用$獲取 (( )) 命令的結果,這和使用$獲得變量值是類似的。
表1:(( )) 的用法
運算操作符/運算命令 | 說明 |
---|---|
((a=10+66) ((b=a-15)) ((c=a+b)) |
這種寫法可以在計算完成後給變量賦值。以 ((b=a-15)) 為例,即將 a-15 的運算結果賦值給變量 c。
註意,使用變量時不用加$前綴,(( )) 會自動解析變量名。 |
a=$((10+66) b=$((a-15)) c=$((a+b)) |
可以在 (( )) 前面加上$符號獲取 (( )) 命令的執行結果,也即獲取整個表達式的值。以 c=$((a+b)) 為例,即將 a+b 這個表達式的運算結果賦值給變量 c。
註意,類似 c=((a+b)) 這樣的寫法是錯誤的,不加$就不能取得表達式的結果。 |
((a>7 && b==c)) | (( )) 也可以進行邏輯運算,在 if 語句中常會使用邏輯運算。 |
echo $((a+10)) | 需要立即輸出表達式的運算結果時,可以在 (( )) 前面加$符號。 |
((a=3+5, b=a+10)) | 對多個表達式同時進行計算。 |
在 (( )) 中使用變量無需加上$前綴,(( )) 會自動解析變量名,這使得代碼更加簡潔,也符合程序員的書寫習慣。
Shell (( )) 實例演示
【實例1】利用 (( )) 進行簡單的數值計算。
[jb51.net]$ echo $((1+1)) 2 [jb51.net]$ echo $((6-3)) 3 [jb51.net]$ i=5 [jb51.net]$ ((i=i*2)) #可以簡寫為 ((i*=2))。 [jb51.net]$ echo $i #使用 echo 輸出變量結果時要加 $。 10
【實例2】用 (( )) 進行稍微復雜一些的綜合算術運算。
[jb51.net]$ ((a=1+2**3-4%3)) [c.biancheng.net]$ echo $a 8 [jb51.net]$ b=$((1+2**3-4%3)) #運算後將結果賦值給變量,變量放在瞭括號的外面。 [jb51.net]$ echo $b 8 [jb51.net]$ echo $((1+2**3-4%3)) #也可以直接將表達式的結果輸出,註意不要丟掉 $ 符號。 8 [jb51.net]$ a=$((100*(100+1)/2)) #利用公式計算1+2+3+...+100的和。 [jb51.net]$ echo $a 5050 [jb51.net]$ echo $((100*(100+1)/2)) #也可以直接輸出表達式的結果。 5050
【實例3】利用 (( )) 進行邏輯運算。
[jb51.net]$ echo $((3<8)) #3<8 的結果是成立的,因此,輸出瞭 1,1 表示真 1 [jb51.net]$ echo $((8<3)) #8<3 的結果是不成立的,因此,輸出瞭 0,0 表示假。 0 [jb51.net]$ echo $((8==8)) #判斷是否相等。 1 [jb51.net]$ if ((8>7&&5==5)) > then > echo yes > fi yes
最後是一個簡單的 if 語句的格式,它的意思是,如果 8>7 成立,並且 5==5 成立,那麼輸出 yes。顯然,這兩個條件都是成立的,所以輸出瞭 yes。
【實例4】利用 (( )) 進行自增(++)和自減(–)運算。
[jb51.net]$ a=10 [jb51.net]$ echo $((a++)) #如果++在a的後面,那麼在輸出整個表達式時,會輸出a的值,因為a為10,所以表達式的值為10。 10 [jb51.net]$ echo $a #執行上面的表達式後,因為有a++,因此a會自增1,因此輸出a的值為11。 11 [jb51.net]$ a=11 [jb51.net]$ echo $((a--)) #如果--在a的後面,那麼在輸出整個表達式時,會輸出a的值,因為a為11,所以表達式的值的為11。 11 [jb51.net]$ echo $a #執行上面的表達式後,因為有a--,因此a會自動減1,因此a為10。 10 [jb51.net]$ a=10 [jb51.net]$ echo $((--a)) #如果--在a的前面,那麼在輸出整個表達式時,先進行自增或自減計算,因為a為10,且要自減,所以表達式的值為9。 9 [jb51.net]$ echo $a #執行上面的表達式後,a自減1,因此a為9。 9 [jb51.net]$ echo $((++a)) #如果++在a的前面,輸出整個表達式時,先進行自增或自減計算,因為a為9,且要自增1,所以輸出10。 10 [jb51.net]$ echo $a #執行上面的表達式後,a自增1,因此a為10。 10
本教程假設讀者具備基本的編程能力,相信讀者對於前自增(前自減)和後自增(後自減)的區別也非常清楚,這裡就不再贅述,隻進行簡單的說明:
- 執行 echo $((a++)) 和 echo $((a–)) 命令輸出整個表達式時,輸出的值即為 a 的值,表達式執行完畢後,會再對 a 進行 ++、– 的運算;
- 而執行 echo $((++a)) 和 echo $((–a)) 命令輸出整個表達式時,會先對 a 進行 ++、– 的運算,然後再輸出表達式的值,即為 a 運算後的值。
【實例5】利用 (( )) 同時對多個表達式進行計算。
[jb51.net]$ ((a=3+5, b=a+10)) #先計算第一個表達式,再計算第二個表達式 [jb51.net]$ echo $a $b 8 18 [jb51.net]$ c=$((4+8, a+b)) #以最後一個表達式的結果作為整個(())命令的執行結果 [jb51.net]$ echo $c 26
到此這篇關於Shell(())實現對整數進行數學運算的文章就介紹到這瞭,更多相關Shell(()) 整數運算內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Shell四種運行方式(啟動方式)的實現
- shell 流程控制語句的具體使用
- Shell腳本中$符號的幾種用法小結
- linux shell 編程之函數使用詳解
- Shell腳本入門之編寫格式與執行方式的實現