每个Shell支持各种运算符。我们将在本章中详细讨论Bourne shell(默认Shell)。
我们现在将讨论以下运算符-
- 算术运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
Bourne Shell最初没有任何执行简单算术运算的机制,但它使用外部程序,即 awk 或 expr 。
以下示例显示如何将两个数字相加-
#!/bin/sh val=`expr 2 + 2` echo "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 |