Unix / Linux - Shell 基本运算符
每个 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 |
/ (除法) | 将左手操作数除以右手操作数 | `expr $b / $a` 将得到 2 |
% (模数) | 左手操作数除以右手操作数并返回余数 | `expr $b % $a` 将给出 0 |
= (赋值) | 在左操作数中分配右操作数 | a = $b 会将 b 的值赋给 a |
== (相等) | 比较两个数,如果相同则返回true。 | [ $a == $b ] 会返回 false。 |
!= (不相等) | 比较两个数,如果不同则返回真。 | [ $a != $b ] 将返回 true。 |
了解所有条件表达式都应该放在方括号内并在它们周围留有空格非常重要,例如 [ $a == $b ] 是正确的,而 [$ a==$b] 不正确。
所有算术计算都是使用长整数完成的。
关系运算符
Bourne Shell 支持以下特定于数值的关系运算符。 这些运算符不适用于字符串值,除非它们的值为数字。
例如,以下运算符将用于检查 10 和 20 之间的关系以及"10"和"20"之间的关系,但不检查"10"和"20"之间的关系。
假设变量a为10,变量b为20 −
运算符 | 说明 | 示例 |
---|---|---|
-eq | 检查两个操作数的值是否相等; 如果是,则条件成立。 | [ $a -eq $b ] 为 not true。 |
-ne | 检查两个操作数的值是否相等; 如果值不相等,则条件为真。 | [ $a -ne $b ] 为 true。 |
-gt | 检查左操作数的值是否大于右操作数的值; 如果是,则条件变为真。 | [ $a -gt $b 为 not true。 |
-lt | 检查左操作数的值是否小于右操作数的值; 如果是,则条件变为真。 | [ $a -lt $b ] 为 true。 |
-ge | 检查左操作数的值是否大于或等于右操作数的值; 如果是,则条件变为真。 | [ $a -ge $b 为 not true。 |
-le | 检查左操作数的值是否小于或等于右操作数的值; 如果是,则条件成立。 | [ $a -le $b ] 为 true。 |
了解所有条件表达式都应放在方括号内并在其周围留有空格非常重要。 例如,[ $a <= $b ] 是正确的,而 [$a <= $b] 是错误的。
布尔运算符
Bourne Shell 支持以下布尔运算符。
假设变量a为10,变量b为20 −
运算符 | 说明 | 示例 |
---|---|---|
! | 这是逻辑否定。 这会将 true 条件反转为 false,反之亦然。 | [ ! false ] 为 true。 |
-o | 这是逻辑或。 如果其中一个操作数为真,则条件变为真。 | [ $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 为 not true。 |
!= | 检查两个操作数的值是否相等; 如果值不相等,则条件变为真。 | [ $a != $b ] 为 true。 |
-z | 检查给定的字符串操作数大小是否为零; 如果它的长度为零,则返回 true。 | [ -z $a 为 not true。 |
-n | 检查给定的字符串操作数大小是否非零; 如果它是非零长度,则返回 true。 | [ -n $a ] 为 not false。 |
str | 检查 str 是否为空字符串; 如果为空,则返回 false。 | [ $a ] 为 not false。 |
文件测试操作符
我们有一些运算符可用于测试与 Unix 文件关联的各种属性。
假设一个变量file 包含一个现有的文件名"test",其大小为100 字节并且具有read、write 和< b>执行权限 −
运算符 | 说明 | 示例 |
---|---|---|
-b file | 检查文件是否是块特殊文件; 如果是,则条件变为真。 | [ -b $file ] 为 false。 |
-c file | 检查文件是否为字符特殊文件; 如果是,则条件变为真。 | [ -c $file ] 为 false。 |
-d file | 检查文件是否是一个目录; 如果是,则条件成立。 | [ -d $file 为 not true。 |
-f file | 检查文件是否是普通文件而不是目录或特殊文件; 如果是,则条件成立。 | [ -f $file ] 为 true。 |
-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 ] 为 true。 |
-w file | 检查文件是否可写; 如果是,则条件成立。 | [ -w $file ] 为 true。 |
-x file | 检查文件是否可执行; 如果是,则条件成立。 | [ -x $file ] 为 true。 |
-s file | 检查文件大小是否大于 0; 如果是,则条件变为真。 | [ -s $file ] 为 true。 |
-e file | 检查文件是否存在; 即使文件是目录但存在也是如此。 | [ -e $file ] 为 true。 |
C Shell 运算符
以下链接将让您简要了解 C Shell 运算符 −
Korn Shell 运算符
以下链接可帮助您了解 Korn Shell 运算符 −