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

執行上面示例代碼,得到以下結果: