Bash算术运算符

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

执行上面示例代码,得到以下结果: