C語言中文網 目錄
Shell腳本
1 Shell是什么
2 Shell是運維人員必須掌握的技能
3 常用的Shell有哪些
4 進入Shell的兩種方式
5 Shell命令的基本格式
6 Shell命令的本質到底是什么?如何自己實現一個命令?
7 Shell命令的選項和參數在本質上是什么
8 Shell命令提示符
9 修改命令提示符
10 第一個Shell腳本
11 執行Shell腳本
12 Shell四種運行方式(啟動方式)
13 Shell配置文件(配置腳本)的加載
14 如何編寫自己的Shell配置文件?
15 Shell變量
16 Shell變量的作用域
17 Shell命令替換
18 Shell位置參數
19 Shell特殊變量
20 Shell $*和$@的區別
21 Shell $?
22 Shell字符串詳解
23 Shell字符串拼接
24 Shell字符串截取
25 Shell數組
26 Shell獲取數組長度
27 Shell數組拼接
28 Shell刪除數組元素
29 Shell關聯數組
30 Shell內建命令
31 Shell alias命令
32 Shell echo命令
33 Shell read命令
34 Shell exit命令
35 Shell declare和typeset命令
36 Shell數學計算
37 Shell (())
38 Shell let命令
39 Shell $[]
40 Shell expr命令
41 Linux bc命令
42 Shell declare -i
43 Shell if else
44 Shell退出狀態
45 Shell test命令
46 Shell [[]]
47 Shell case in
48 Shell while
49 Shell until
50 Shell for
51 Shell select in
52 Shell break和continue
53 Shell函數
54 Shell函數參數
55 Shell函數返回值精講
56 Shell重定向
57 Linux中的文件描述符到底是什么?
58 結合文件描述符談重定向,徹底理解重定向的本質!
59 使用exec命令操作文件描述符
60 Shell代碼塊重定向
61 Shell Here Document
62 Shell Here String
63 Shell組命令
64 Shell進程替換
65 Linux管道
66 子Shell和子進程到底有什么區別?
67 如何檢測子Shell和子進程?
68 Shell過濾器
69 Linux中的信號
70 Bash Shell中的信號
71 Linux進程是什么
72 Shell模塊化(把代碼分散到多個腳本文件中)
首頁 > Shell腳本 閱讀:3,858

Shell (()):對整數進行數學運算

< 上一頁Shell數學計算 Shell let命令下一頁 >

雙小括號 (( )) 是 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】利用 (( )) 進行簡單的數值計算。
[www.frifeb11.com]$ echo $((1+1))
2
[www.frifeb11.com]$ echo $((6-3))
3
[www.frifeb11.com]$ i=5
[www.frifeb11.com]$ ((i=i*2))  #可以簡寫為 ((i*=2))。
[www.frifeb11.com]$ echo $i   #使用 echo 輸出變量結果時要加 $。
10

【實例2】用 (( )) 進行稍微復雜一些的綜合算術運算。
[www.frifeb11.com]$ ((a=1+2**3-4%3))
[www.frifeb11.com]$ echo $a
8
[www.frifeb11.com]$ b=$((1+2**3-4%3)) #運算后將結果賦值給變量,變量放在了括號的外面。
[www.frifeb11.com]$ echo $b
8
[www.frifeb11.com]$ echo $((1+2**3-4%3)) #也可以直接將表達式的結果輸出,注意不要丟掉 $ 符號。
8
[www.frifeb11.com]$ a=$((100*(100+1)/2)) #利用公式計算1+2+3+...+100的和。
[www.frifeb11.com]$ echo $a
5050
[www.frifeb11.com]$ echo $((100*(100+1)/2)) #也可以直接輸出表達式的結果。
5050

【實例3】利用 (( )) 進行邏輯運算。
[www.frifeb11.com]$ echo $((3<8))  #3<8 的結果是成立的,因此,輸出了 1,1 表示真
1
[www.frifeb11.com]$ echo $((8<3))  #8<3 的結果是不成立的,因此,輸出了 0,0 表示假。
0
[www.frifeb11.com]$ echo $((8==8)) #判斷是否相等。
1
[www.frifeb11.com]$ if ((8>7&&5==5))
> then
> echo yes
> fi
yes
最后是一個簡單的 if 語句的格式,它的意思是,如果 8>7 成立,并且 5==5 成立,那么輸出 yes。顯然,這兩個條件都是成立的,所以輸出了 yes。

【實例4】利用 (( )) 進行自增(++)和自減(--)運算。
[www.frifeb11.com]$ a=10
[www.frifeb11.com]$ echo $((a++))  #如果++在a的后面,那么在輸出整個表達式時,會輸出a的值,因為a為10,所以表達式的值為10。
10
[www.frifeb11.com]$ echo $a #執行上面的表達式后,因為有a++,因此a會自增1,因此輸出a的值為11。
11
[www.frifeb11.com]$ a=11
[www.frifeb11.com]$ echo $((a--)) #如果--在a的后面,那么在輸出整個表達式時,會輸出a的值,因為a為11,所以表達式的值的為11。
11
[www.frifeb11.com]$ echo $a #執行上面的表達式后,因為有a--,因此a會自動減1,因此a為10。
10
[www.frifeb11.com]$ a=10
[www.frifeb11.com]$ echo $((--a))  #如果--在a的前面,那么在輸出整個表達式時,先進行自增或自減計算,因為a為10,且要自減,所以表達式的值為9。
9
[www.frifeb11.com]$ echo $a #執行上面的表達式后,a自減1,因此a為9。
9
[www.frifeb11.com]$ echo $((++a))  #如果++在a的前面,輸出整個表達式時,先進行自增或自減計算,因為a為9,且要自增1,所以輸出10。
10
[www.frifeb11.com]$ echo $a  #執行上面的表達式后,a自增1,因此a為10。
10
本教程假設讀者具備基本的編程能力,相信讀者對于前自增(前自減)和后自增(后自減)的區別也非常清楚,這里就不再贅述,只進行簡單的說明:
  • 執行 echo $((a++)) 和 echo $((a--)) 命令輸出整個表達式時,輸出的值即為 a 的值,表達式執行完畢后,會再對 a 進行 ++、-- 的運算;
  • 而執行 echo $((++a)) 和 echo $((--a)) 命令輸出整個表達式時,會先對 a 進行 ++、-- 的運算,然后再輸出表達式的值,即為 a 運算后的值。

【實例5】利用 (( )) 同時對多個表達式進行計算。
[www.frifeb11.com]$ ((a=3+5, b=a+10))  #先計算第一個表達式,再計算第二個表達式
[www.frifeb11.com]$ echo $a $b
8 18
[www.frifeb11.com]$ c=$((4+8, a+b))  #以最后一個表達式的結果作為整個(())命令的執行結果
[www.frifeb11.com]$ echo $c
26
< 上一頁Shell數學計算 Shell let命令下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo