- Unix/Linux 初学者教程
- Unix/Linux - 首页
- Unix/Linux - 什么是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 - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- 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 |
== (等于) | 比较两个数字,如果两者相同则返回真。 | [ $a == $b ] 将返回假。 |
!= (不等于) | 比较两个数字,如果两者不同则返回真。 | [ $a != $b ] 将返回真。 |
非常重要的是要理解所有条件表达式都应该放在方括号内,并且方括号周围要有空格,例如[ $a == $b ]是正确的,而[$a==$b]是不正确的。
所有算术计算都是使用长整数进行的。
关系运算符
Bourne Shell支持以下特定于数值的关系运算符。除非这些值是数字,否则这些运算符不适用于字符串值。
例如,以下运算符将用于检查10和20之间的关系,以及"10"和"20"之间的关系,但不适用于"ten"和"twenty"之间的关系。
假设变量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,则:
操作符 | 描述 | 示例 |
---|---|---|
! | 这是逻辑非。它将真条件转换为假,反之亦然。 | [ ! false ] 为真。 |
-o | 这是逻辑或。如果其中一个操作数为真,则条件为真。 | [ $a -lt 20 -o $b -gt 100 ] 为真。 |
-a | 这是逻辑与。如果两个操作数都为真,则条件为真,否则为假。 | [ $a -lt 20 -a $b -gt 100 ] 为假。 |
字符串运算符
Bourne Shell支持以下字符串运算符。
假设变量a值为"abc",变量b值为"efg",则:
操作符 | 描述 | 示例 |
---|---|---|
= | 检查两个操作数的值是否相等;如果是,则条件为真。 | [ $a = $b ] 为假。 |
!= | 检查两个操作数的值是否相等;如果不相等,则条件为真。 | [ $a != $b ] 为真。 |
-z | 检查给定字符串操作数的大小是否为零;如果长度为零,则返回真。 | [ -z $a ] 为假。 |
-n | 检查给定字符串操作数的大小是否为非零;如果长度不为零,则返回真。 | [ -n $a ] 为真。 |
str | 检查str是否不是空字符串;如果是空字符串,则返回假。 | [ $a ] 为真。 |
文件测试运算符
我们有一些运算符可用于测试与Unix文件相关的各种属性。
假设变量file包含一个现有文件名"test",其大小为100字节,并且具有-读、写和执行权限:
操作符 | 描述 | 示例 |
---|---|---|
-b file | 检查文件是否是块特殊文件;如果是,则条件为真。 | [ -b $file ] 为假。 |
-c file | 检查文件是否是字符特殊文件;如果是,则条件为真。 | [ -c $file ] 为假。 |
-d file | 检查文件是否是目录;如果是,则条件为真。 | [ -d $file ] 为假。 |
-f file | 检查文件是否是普通文件(与目录或特殊文件相对);如果是,则条件为真。 | [ -f $file ] 为真。 |
-g file | 检查文件是否设置了其设置组ID (SGID) 位;如果是,则条件为真。 | [ -g $file ] 为假。 |
-k file | 检查文件是否设置了其粘滞位;如果是,则条件为真。 | [ -k $file ] 为假。 |
-p file | 检查文件是否命名管道;如果是,则条件为真。 | [ -p $file ] 为假。 |
-t file | 检查文件描述符是否打开并与终端关联;如果是,则条件为真。 | [ -t $file ] 为假。 |
-u file | 检查文件是否设置了其设置用户ID (SUID) 位;如果是,则条件为真。 | [ -u $file ] 为假。 |
-r file | 检查文件是否可读;如果是,则条件为真。 | [ -r $file ] 为真。 |
-w file | 检查文件是否可写;如果是,则条件为真。 | [ -w $file ] 为真。 |
-x file | 检查文件是否可执行;如果是,则条件为真。 | [ -x $file ] 为真。 |
-s file | 检查文件大小是否大于0;如果是,则条件为真。 | [ -s $file ] 为真。 |
-e file | 检查文件是否存在;即使文件是目录但存在,也为真。 | [ -e $file ] 为真。 |
C Shell 操作符
以下链接将简要介绍 C Shell 操作符:
Korn Shell 操作符
以下链接将帮助您了解 Korn Shell 操作符: