Bash算術運算子


在本小節中,我們將學習如何在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

1. Bash執行算術運算

在bash shell上有許多選項可以執行算術運算。下面提供了一些我們可以用來執行算術運算的選項:

1.1. 雙括號

雙括號是在Bash shell中執行基本算術運算的最簡單機制,可以使用帶或不帶前導$的雙括號來使用此方法。

語法

((expression))

可以採用四種不同的方法來實現所需的目標。參考下面給出的方法,以了解如何使用雙括號機制(假設想將數位103相加):

方法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

執行上面範例程式碼,得到以下結果:

1.2. Let構建

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 let

1.3. 反引號

在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`"

執行上面範例程式碼,得到以下結果: