每个Shell支持各种运算符。我们将在本章中详细讨论Bourne shell(默认Shell)。
我们现在将讨论以下运算符-
- 算术运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
Bourne Shell最初没有任何执行简单算术运算的机制,但它使用外部程序,即 awk 或 expr 。
以下示例显示如何将两个数字相加-
#!/bin/shval=
expr 2 + 2echo "Total value : $val"
上面的脚本将产生以下输出-
Total value : 4
算术运算符
Bourne Shell支持以下算术运算符。
假设变量 a=10,变量 b=20,然后-
| 操作符 | 描述 | 示例 |
|---|---|---|
| + | 相加 | `expr $a + $b`=30 |
| - | 相减 | `expr $a - $b`=-10 |
| * | 相乘 | `expr $a\* $b`=200 |
| / | 相除 | xpr $b/$a`=2 |
| % | 取模 | `expr $b % $a`=0 |
| = | 赋值 | a=$b 将 b 的值赋给 a |
| == | 相等 | [ $a == $b ] 将返回false |
| != | 不相等 | [ $a != $b ] 将返回true |
关系运算符
Bourne Shell支持以下特定于数值的关系运算符。这些运算符不适用于字符串值,除非它们的值是数字。
假设变量 a=10,变量 b=20,然后-
| 操作符 | 描述 | 示例 |
|---|---|---|
| -eq | 检查两个值是否相等 | [$a -eq $b] =》 false |
| -ne | 检查两个值是否不相等 | [$a -ne $b] => true |
| -gt | 检查左值是否大于右值 | [$a -gt $b] => false |
| -lt | 检查左值是否小于右值 | [$a -lt $b] => true |
| -ge | 检查左值是否大于或等于右值 | [$a -ge $b] => false |
| -le | 检查左值是否小于或等于右值 | [$a -le $b] => true |
布尔运算符
Bourne Shell支持以下布尔运算符。
假设变量 a =10,变量 b =20,然后-
| 操作符 | 描述 | 示例 |
|---|---|---|
| ! | 逻辑 非 | [!false] ==true |
| -o | 逻辑 OR | [$a -lt 20 -o $b -gt 100] == true |
| -a | 逻辑 AND | [$a -lt 20 -a $b -gt 100] ==false |
字符串运算符
Bourne Shell支持以下字符串运算符。
假设变量 a ="abc",变量 b="efg",则-
| 操作符 | 描述 | 示例 |
|---|---|---|
| = | 检查两个值是否相等 | [$a=$b] ==false。 |
| != | 检查两个值是否不相等 | [$a!= $b] == true。 |
| -z | 检查给定的字符串操作数大小是否为零 | [-z $a] == false。 |
| -n | 检查给定的字符串操作数大小是否为非零 | [-n $a] == true。 |
| str | 检查 str 是否不是空字符串 | [$a] == true。 |
文件测试
我们有一些运算符可用于测试与Unix文件相关的各种属性。
假设变量文件拥有一个现有文件名" test",其大小为100个字节,并且具有 read , write 和 execute 权限
| 操作符 | 描述 | 示例 |
|---|---|---|
| -b file | 检查文件是否为块特殊文件 | [-b $file] => false |
| -c file | 检查文件是否为字符特殊文件 | [-c $file] => false |
| -d file | 检查文件是否为目录 | [-d $file] => false |
| -f file | 检查文件是否是普通文件,而不是目录或特殊文件 | [-f $file] => true |
| -g file | 检查文件是否设置了其设置的组ID(SGID)位 | [-g $file] => false |
| -k file | 检查文件是否设置了Sticky bit set | [-k $file] => false |
| -p file | 检查文件是否为命名管道 | [-p $file] => false |
| -t file | 检查文件描述符是否打开并与终端关联 | [-t $file] => false |
| -u file | 检查文件是否设置了其设置用户ID(SUID)位 | [-u $file] => false |
| -r file | 检查文件是否可读 | [-r $file] => true |
| -w file | 检查文件是否可写 | [-w $file] => true |
| -x file | 检查文件是否可执行 | [-x $file] => true |
| -s file | 检查文件的大小是否大于0 | [-s $file] => true |
| -e file | 检查文件是否存在 | [-e $file] => true |