- Unix / Linux 初学者
- Unix / Linux - 主页
- Unix / Linux - 入门
- Unix / Linux - 文件管理
- Unix / Linux - 目录
- Unix / Linux - 文件权限
- Unix / Linux - 环境
- Unix / Linux - 基本实用程序
- Unix / Linux - 管道和过滤器
- Unix / Linux - 进程
- Unix / Linux - 通信
- Unix / Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix / Linux - Shell 脚本
- Unix / Linux - 什么是 Shell?
- Unix / Linux - 使用变量
- Unix / Linux - 特殊变量
- Unix / Linux - 使用数组
- Unix / Linux - 基本运算符
- Unix / Linux - 决策
- Unix / Linux - Shell 循环
- Unix / Linux - 循环控制
- Unix / Linux - Shell 替换
- Unix / Linux - 引用机制
- Unix / Linux - IO 重定向
- Unix / Linux - Shell 函数
- Unix / Linux - 联机帮助页
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。 |
!=(不等于) | 比较两个数字,如果两个不同则返回 true。 | [ $a != $b ] 将返回 true。 |
理解所有条件表达式都应该位于方括号内并在其周围留有空格,这一点非常重要,例如[ $a == $b ]是正确的,而[$a==$b]是不正确的。
所有算术计算都是使用长整数完成的。
关系运算符
Bourne Shell 支持以下特定于数值的关系运算符。这些运算符不适用于字符串值,除非它们的值为数字。
例如,以下运算符将检查 10 和 20 之间以及“10”和“20”之间的关系,但不检查“10”和“20”之间的关系。
假设变量a为 10,变量b为 20,则 -
操作员 | 描述 | 例子 |
---|---|---|
-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,则 -
操作员 | 描述 | 例子 |
---|---|---|
! | 这是逻辑否定。这会将 true 条件反转为 false,反之亦然。 | [!假] 是真的。 |
-o | 这是逻辑或。如果其中一个操作数为真,则条件为真。 | [ $a -lt 20 -o $b -gt 100 ] 是正确的。 |
-A | 这是逻辑AND。如果两个操作数都为 true,则条件为 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是否不是空字符串;如果为空,则返回 false。 | [ $a ] 不是假的。 |
文件测试操作员
我们有一些运算符可用于测试与 Unix 文件相关的各种属性。
假设变量文件保存现有文件名“test”,其大小为 100 字节,并且具有读取、写入和执行权限 -
操作员 | 描述 | 例子 |
---|---|---|
-b 文件 | 检查文件是否是块特殊文件;如果是,则条件成立。 | [ -b $file ] 是错误的。 |
-c 文件 | 检查文件是否为字符特殊文件;如果是,则条件成立。 | [ -c $file ] 是错误的。 |
-d 文件 | 检查文件是否是目录;如果是,则条件成立。 | [ -d $file ] 不正确。 |
-f 文件 | 检查文件是否是普通文件而不是目录或特殊文件;如果是,则条件成立。 | [ -f $file ] 为真。 |
-g 文件 | 检查文件是否已设置其组 ID (SGID) 位;如果是,则条件成立。 | [ -g $file ] 是错误的。 |
-k 文件 | 检查文件是否设置了粘滞位;如果是,则条件成立。 | [ -k $file ] 为假。 |
-p 文件 | 检查文件是否是命名管道;如果是,则条件成立。 | [ -p $file ] 是错误的。 |
-t 文件 | 检查文件描述符是否打开并与终端关联;如果是,则条件成立。 | [ -t $file ] 为假。 |
-u 文件 | 检查文件是否已设置其设置用户 ID (SUID) 位;如果是,则条件成立。 | [ -u $file ] 是错误的。 |
-r 文件 | 检查文件是否可读;如果是,则条件成立。 | [ -r $file ] 为真。 |
-w 文件 | 检查文件是否可写;如果是,则条件成立。 | [ -w $file ] 是正确的。 |
-x 文件 | 检查文件是否可执行;如果是,则条件成立。 | [ -x $file ] 为真。 |
-s 文件 | 检查文件大小是否大于 0;如果是,则条件成立。 | [ -s $file ] 是正确的。 |
-e 文件 | 检查文件是否存在;即使 file 是一个目录但存在,也是如此。 | [ -e $file ] 为真。 |
C shell 运算符
以下链接将为您提供有关 C Shell 运算符的简要介绍 -
科恩壳牌运营商
以下链接可帮助您了解 Korn Shell 操作员 -