在本小節中,我們將學習如何在Bash中使用算術運算子。
根據希望通過指令碼獲得的結果型別,我們有時可能需要應用算術運算子。像變數一樣,它們也很容易應用。在bash指令碼中,可以對數值執行算術運算以獲得所需的結果。
Bash Shell支援11種算術運算子。
下表展示了每種算術運算子的語法,描述和範例:
運算子 | 描述 | 範例 |
---|---|---|
+ |
加法,數位(運算元)的加法 | $(( 10 + 3 )) ,結果為:13 |
- |
減法,從第一個到第二個運算元的減法 | $(( 10 - 3 )) ,結果為:7 |
* |
乘法,運算元的乘法。 | $(( 10 * 3 )) ,結果為:30 |
/ |
除法,第一個運算元除以第二個運算元並返回商。 | $(( 10 / 3 )) ,結果為:3 |
** |
求冪,第一運算元的第二運算元的冪值。 | $(( 10 ** 3 )) ,結果為:1000 |
% |
模,測量第一個運算元除以第二個運算元時的餘數。 | $(( 10 % 3 )) ,結果為:1 |
+= |
通過常數遞增變數,用於按提供的常數遞增第一個運算元的值。 | x=10;let "x += 3";echo $x; 結果為:13 |
-= |
通過常數遞減變數,用於按提供的常數遞減第一個運算元的值。 | x=10;let "x -= 3";echo $x; 結果為:7 |
*= |
將變數乘以常數,用於將第一個運算元的值乘以提供的常數。 | x=10;let "x *= 3";echo $x; 結果為:30 |
/= |
將變數除以常數,用於計算(變數/常數)的值並將結果儲存回變數。 | x=10;let "x /= 3";echo $x; 結果為:3 |
%= |
變數除以常數的餘數,用於計算(變數%常數)的值並將結果儲存回變數。 | x=10;let "x %= 3";echo $x; 結果為:1 |
在bash shell上有許多選項可以執行算術運算。下面提供了一些我們可以用來執行算術運算的選項:
雙括號是在Bash shell中執行基本算術運算的最簡單機制,可以使用帶或不帶前導$
的雙括號來使用此方法。
語法
((expression))
可以採用四種不同的方法來實現所需的目標。參考下面給出的方法,以了解如何使用雙括號機制(假設想將數位10
和3
相加):
方法1
Sum=$((10+3))
echo "Sum = $Sum"
方法2
((Sum=10+3))
echo "Sum = $Sum"
方法3
Num1=10
Num2=3
((Sum=Num1+Num2))
echo "Sum = $Sum"
方法4
Num1=10
Num2=3
Sum=$((Num1+Num2))
echo "Sum = $Sum"
所有這些方法將輸出相同的結果:
Sum = 13
下面的範例演示如何在Bash shell指令碼中對運算子使用雙括號:
Bash指令碼檔案:arithmetic-operator.sh
#!/bin/bash
x=6
y=10
echo "x=6, y=10"
echo "Addition of x & y"
echo $(( $x + $y ))
echo "Subtraction of x & y"
echo $(( $x - $y ))
echo "Multiplication of x & y"
echo $(( $x * $y ))
echo "Division of x by y"
echo $(( $x / $y ))
echo "Exponentiation of x,y"
echo $(( $x ** $y ))
echo "Modular Division of x,y"
echo $(( $x % $y ))
echo "Incrementing x by 5, then x= "
(( x += 5 ))
echo $x
echo "Decrementing x by 5, then x= "
(( x -= 5 ))
echo $x
echo "Multiply of x by 5, then x="
(( x *= 5 ))
echo $x
echo "Dividing x by 5, x= "
(( x /= 5 ))
echo $x
echo "Remainder of Dividing x by 5, x="
(( x %= 5 ))
echo $x
執行上面範例程式碼,得到以下結果:
let
是Bash的內建命令,它能夠執行算術運算。它遵循以下基本語法格式:
let <arithmetic expression>
下面給出一個範例,說明如何在Bash指令碼中使用let
命令。將下面程式碼儲存到檔案:let-operator.sh
#!/bin/bash
x=10
y=6
z=0
echo "Addition"
let "z = $(( x + y ))"
echo "z= $z"
echo "Substraction"
let "z = $((x - y ))"
echo "z= $z"
echo "Multiplication"
let "z = $(( x * y ))"
echo "z = $z"
echo "Division"
let "z = $(( x / y ))"
echo "z = $z"
echo "Exponentiation"
let "z = $(( x ** y ))"
echo "z = $z"
echo "Modular Division"
let "z = $(( x % y ))"
echo "z = $z"
let "x += 5"
echo "Incrementing x by 5, then x= "
echo $x
let "x -= 5"
echo "Decrementing x by 5, then x= "
echo $x
let "x *=5"
echo "Multiply of x by 5, then x="
echo $x
let "x /= 5"
echo "Dividing x by 5, x= "
echo $x
let "x %= 5"
echo "Remainder of Dividing x by 5, x="
echo $x
執行上面範例程式碼,得到以下結果:
在bash指令碼中,還可以使用反引號和expr(稱為通用表示式求值器)執行算術擴充套件。
`expr`
類似於let
,但是不會將結果儲存到變數中,它直接列印結果。與let
不同,不需要將表示式用引號引起來。需要在表示式的專案之間使用空格。重要的是要注意,我們應該在命令替換中使用
`expr`
將輸出儲存到變數中。也可以不使用「反引號」而使用
`expr`
```。
**語法**
```bash
`expr item1 operator item2`
#或者
expr item1 operator item2
下面給出一個範例,說明如何在Bash指令碼中使用反引號和expr
:
Bash指令碼程式檔案:backticks.sh,完整程式碼如下:
#!/bin/bash
#Basic arithmetic using expr
echo "a=10, b=20"
echo "c is the value of addition c=a+b"
a=10
b=20
echo "c= `expr $a + $b`"
執行上面範例程式碼,得到以下結果: