每个shell都支持各种运算符.我们将在本章详细讨论Bourne shell(默认shell).
现在我们将讨论以下运算符 :
算术运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
Bourne shell最初没有任何机制来执行简单的算术运算但它使用外部程序, awk 或 expr .
以下示例显示如何添加两个数字 :
#!/bin/sh val=`expr 2 + 2` echo "Total value : $val"
上述脚本将生成以下结果 :
Total value : 4
添加&减去时需要考虑以下几点;
必须有空格运算符和表达式之间.例如,2+ 2不正确;它应写成2+ 2.
完整的表达式应该包含在''之间,称为反引号.
Bourne Shell支持以下算术运算符.
假设变量 a 持有10,变量 b 持有20然后:
运算符 | 描述 | 示例 |
---|---|---|
+ (增加) | 在运算符的任一侧添加值 | `expr $ a+ $ b`将给出30 |
- (减法) | 从左手操作数中减去右手操作数 | `expr $ a - $ b`将给-10 |
*(乘法) | 将运算符两侧的值相乘 | `expr $ a \ * $ b`将给出200 |
/(Division) | 用左手操作数除左手操作数 | `expr $ b/$ a`将给2 |
%(模数) | 用左手操作数除左手操作数并返回余数 | `expr $ b%$ a`将给0 |
=(Assignment) | 在左操作数中指定右操作数 | a = $ b会将b的值赋值为 |
==(Equality) | 比较两个数字,如果b oth相同然后返回true. | [$ a == $ b]将返回false. |
!=(不等于) | 比较两个数字,如果两个数字不同则返回true. | [$ a!= $ b]将返回true. |
了解所有条件非常重要表达式应该在方括号内,并且周围有空格,例如 [$ a == $ b] 是正确的,而 [$ a == $ b] 是不正确的.
所有算术计算都是使用长整数完成的.
Bourne Shell支持以下内容特定于数值的关系运算符.这些运算符不适用于字符串值,除非它们的值是数字.
例如,以下运算符将用于检查10到20之间以及"10"和"之间"之间的关系. 20"但不在"十"和"二十"之间.
假设变量 a 持有10而变量 b 持有20然后 :
运算符 | Description | 示例 |
---|---|---|
-eq | 检查两个操作数的值是否相等;如果是,则条件成立. | [$ a -eq $ b]不为真. |
-ne | 检查两个操作数的值是否相等;如果值不相等,则条件成立. | [$ a -ne $ b]为真. |
-gt | 检查价值是否为左操作数大于右操作数的值;如果是,则条件成立. | [$ a -gt $ b]不成立. |
-lt | 检查左操作数的值小于右操作数的值;如果是,则条件成立. | [$ a -lt $ b]为真. |
-ge | 检查左操作数的值是否为大于或等于右操作数的值;如果是,则条件成立. | [$ a -ge $ b]不成立. |
-le | 检查左操作数的值小于或等于右操作数的值;如果是,则条件成立. | [$ a -le $ b]为真. |
理解所有条件表达式应放在方括号内,周围有空格是非常重要的.例如, [$ a< = $ b] 是正确的,而 [$ a< = $ b] 不正确.
Bourne Shell支持以下布尔运算符.
假设变量 a 持有10而变量 b 持有20然后:
运算符 | 描述 | 示例 |
---|---|---|
! | 这是逻辑否定.这会将真实条件反转为假,反之亦然. | [!假]是真的. |
-o | 这是合乎逻辑的 OR .如果其中一个操作数为true,则条件成立. | [$ a -lt 20 -o $ b -gt 100]为真. |
-a | 这是合乎逻辑的 AND 的.如果两个操作数均为真,则条件变为true,否则为false. | [$ a -lt 20 -a $ b -gt 100]是假的. |
Bourne Shell支持以下字符串运算符.
假设变量 a 持有"abc"而变量 b 持有"efg"然后 :
运算符 | 描述 | 示例 |
---|---|---|
= | 检查两个操作数的值是否相等;如果是,则条件成立. | [$ a = $ b]不成立. |
!= | 检查两个操作数的值是否相等;如果值不相等则条件变为真. | [$ a!= $ b]为真. |
-z | 检查给定的字符串操作数大小是否为零;如果长度为零,则返回true. | [-z $ a]不为真. |
-n | 检查给定的字符串操作数大小是否为非零;如果它是非零长度,则返回true. | [-n $ a]不为假. |
str | 检查 str 是否不是空字符串;如果为空,则返回false. | [$ a]不为假. |
我们有一些运算符可用于测试与Unix文件相关的各种属性.
假设变量文件包含现有文件名"test",其大小为100字节并且读取,写入并且执行许可&
运算符 | 描述 | 示例 |
---|---|---|
-b file | 检查文件是否为块特殊文件;如果是,则条件成立. | [-b $ file]为false. |
-c file | 检查文件是否为字符特殊文件;如果是,则条件成立. | [-c $ file]为false. |
-d file | 检查文件是否是目录;如果是,则条件成立. | [-d $ file]不为真. |
-f file | 检查文件是普通文件而不是目录或特殊档案;如果是,则条件成立. | [-f $ file]为真. |
-g file | 检查文件是否设置了组ID(SGID)位;如果是,则条件成立. | [-g $ file]为false. |
-k file | 检查文件是否设置了粘滞位;如果是,则条件成立. | [-k $ file]为false. |
-p file | 检查文件是否为命名管道;如果是,则条件成立. | [-p $ file]为false. |
-t file | 检查文件描述符是否已打开并与终端关联;如果是,则条件成立. | [-t $ file]为false. |
-u file | 检查文件是否设置了设置用户ID(SUID)位;如果是,则条件成立. | [-u $ file]为false. |
-r file | 检查文件是否可读;如果是,则条件成立. | [-r $ file]为真. |
-w file | 检查文件是否可写;如果是,那么条件成立. | [-w $ file]为真. |
-x file | 检查文件是否可执行;如果是,则条件成立. | [-x $ file]为真. |
-s file | 检查文件的大小是否大于0;如果是,则条件成立. | [-s $ file]为真. |
-e file | 检查文件是否存在;即使file是目录但存在也是如此. | [-e $ file]为真. |
以下链接将简要介绍C Shell运算符 :
C Shell Operators
以下链接可帮助您了解Korn Shell Operators :
Korn Shell Operators