# Operator

### 基本运算符

shell 和其他编程语言一样，支持多种运算符，包括：

* 算数运算符
* 关系运算符
* 布尔运算符
* 字符串运算符
* 文件测试运算符

原生bash不支持简单的数学运算，但是可以通过其他命令来实现， 例如 [awk](https://yanghaiji.gitbook.io/advanced-books/note/linux/book/command/filemanagement) 和 [expr](https://yanghaiji.gitbook.io/advanced-books/note/linux/book/command/filemanagement) ， [expr](https://yanghaiji.gitbook.io/advanced-books/note/linux/book/command/filemanagement) 最常用。

expr 是一款表达式计算工具，使用它能完成表达式的求值操作。

例如，两个数相加(**注意使用的是反引号 \******\`\******&#x20;而不是单引号 \******'\****)：

```shell
#!/bin/bash
val=`expr 2 + 2`
echo "sum : ${val}"
```

两点注意： 表达式和运算符之间要有空格，例如 2+2 是不对的，必须写成 2 + 2，这与我们熟悉的大多数编程语言不一样。 完整的表达式要被 包含，注意这个字符不是常用的单引号，在 Esc 键下边。

### 算术运算符

下表列出了常用的算术运算符，假定变量 a 为 10，变量 b 为 20：

| 运算符 | 说明                        | 举例                       |
| --- | ------------------------- | ------------------------ |
| +   | 加法                        | `expr $a + $b` 结果为 30。   |
| -   | 减法                        | `expr $a - $b` 结果为 -10。  |
| \*  | 乘法                        | `expr $a \* $b` 结果为 200。 |
| /   | 除法                        | `expr $b / $a` 结果为 2。    |
| %   | 取余                        | `expr $b % $a` 结果为 0。    |
| =   | 赋值                        | a=$b 将把变量 b 的值赋给 a。      |
| ==  | 相等。用于比较两个数字，相同则返回 true。   | \[ $a == $b ] 返回 false。  |
| !=  | 不相等。用于比较两个数字，不相同则返回 true。 | \[ $a != $b ] 返回 true。   |

\*\*注意：\*\*条件表达式要放在方括号之间，并且要有空格，例如: **\[$a==$b]** 是错误的，必须写成 **\[ $a == $b ]**。

```shell
#!/bin/bash
val=`expr 2 + 2`
echo "sum : ${val}"

a=2021
b=126

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi
```
