×
UNIX 关于

UNIX 基础

UNIX 什么是 UNIX ?UNIX 文件管理UNIX 目录UNIX 文件权限UNIX 环境UNIX 实用工具UNIX 管道和过滤器UNIX 进程管理UNIX 通信工具UNIX vi 编辑器使用向导

UNIX Shell编程

UNIX 什么是 Shell 脚本UNIX Shell变量UNIX 特殊变量UNIX Shell数组UNIX Shell基本操作符UNIX Shell if...else语句UNIX Shell循环UNIX Shell循环控制UNIX Shell替代UNIX Shell引用机制UNIX 输入/输出重定向UNIX Shell函数UNIX Shell内建数学函数UNIX Manpage 帮助

UNIX 进阶

UNIX 正则表达式和 SEDUNIX 文件系统基础知识UNIX 用户管理UNIX 系统性能UNIX 系统日志UNIX 信号和 Traps

UNIX 常用资源汇总

UNIX 常用命令UNIX 快速入门指南

UNIX Shell基本操作符


每一种 Shell 都支持各种各样的操作符。我们的教程基于默认的 Shell(Bourne),所以在我们的教程中涵盖所有重要的 Bourne 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” 的关系,但不能用于判断 “ten” 和 “twenty” 的关系。

假设变量 a 赋值为 10, 变量 b 赋值为 20:

运算符 描述 例子
-eq 检查两个操作数的值是否相等,如果值相等,那么条件为真。 [ $a -eq $b ] is not true.
-ne 检查两个操作数的值是否相等,如果值不相等,那么条件为真。 [ $a -ne $b ] is true.
-gt 检查左操作数的值是否大于右操作数的值,如果是的,那么条件为真。 [ $a -gt $b ] is not true.
-lt 检查左操作数的值是否小于右操作数的值,如果是的,那么条件为真。 [ $a -lt $b ] is true.
-ge 检查左操作数的值是否大于等于右操作数的值,如果是的,那么条件为真。 [ $a -ge $b ] is not true.
-le 检查左操作数的值是否小于等于右操作数的值,如果是的,那么条件为真。 [ $a -le $b ] is true.

这里需要非常注意是,所有的条件表达式和操作符之间都必须用空格隔开,例如 [$a <= $b] 是正确的,而 [$a<=$b] 是不正确的。

布尔操作符

Bourne Shell 支持以下的布尔操作符。

假设变量 a 赋值为 10, 变量 b 赋值为 20:

运算符 描述 例子
! 这表示逻辑否定。如果条件为假,返回真,反之亦然。 [ ! false ] is true.
-o 这表示逻辑 OR。如果操作对象中有一个为真,那么条件将会是真。 [ $a -lt 20 -o $b -gt 100 ] is true.
-a 这表示逻辑 AND。如果两个操作对象都是真,那么条件才会为真,否则为假。 [ $a -lt 20 -a $b -gt 100 ] is false.

字符串运算符:

Bourne Shell 支持以下字符串运算符。

假设变量 a 赋值为 "abc", 变量 b 赋值为 "efg":

示例说明

运算符 描述 例子
= 检查两个操作数的值是否相等,如果是的,那么条件为真。 [ $a = $b ] is not true.
!= 检查两个操作数的值是否相等,如果值不相等,那么条件为真。 [ $a != $b ] is true.
-z 检查给定字符串操作数的长度是否为零。如果长度为零,则返回true。 [ -z $a ] is not true.
-n 检查给定字符串操作数的长度是否不为零。如果长度不为零,则返回true。 [ -z $a ] is not false.
str 检查字符串str是否是非空字符串。如果它为空字符串,则返回false。 [ $a ] is not false.

文件测试操作符:

下列操作符用来测试与Unix文件相关联的各种属性。

假设一个文件变量 file,包含一个文件名 "test",文件大小是100字节,在其上有读、写和执行权限:

示例说明

运算符 描述 例子
-b file 检查文件是否为块特殊文件,如果是,那么条件为真。 [ -b $file ] is false.
-c file 检查文件是否为字符特殊文件,如果是,那么条件变为真。 [ -c $file ] is false.
-d file 检查文件是否是一个目录文件,如果是,那么条件为真。 [ -d $file ] is not true.
-f file 检查文件是否是一个不同于目录文件和特殊文件的普通文件,如果是,那么条件为真。 [ -f $file ] is true.
-g file 检查文件是否有组ID(SGID)设置,如果是,那么条件为真。 [ -g $file ] is false.
-k file 检查文件是否有粘贴位设置,如果是,那么条件为真。 [ -k $file ] is false.
-p file 检查文件是否是一个命名管道,如果是,那么条件为真。 [ -p $file ] is false.
-t file 检查文件描述符是否可用且与终端相关,如果是,条件为真实。 [ -t $file ] is false.
-u file 检查文件是否有用户id(SUID)设置,如果是,那么条件为真。 [ -u $file ] is false.
-r file 检查文件是否可读,如果是,那么条件为真。 [ -r $file ] is true.
-w file 检查文件是否可写,如果是,那么条件为真。 [ -w $file ] is true.
-x file 检查文件是否可执行,如果是,那么条件为真。 [ -x $file ] is true.
-s file 检查文件大小是否大于0,如果是,那么条件为真。 [ -s $file ] is true.
-e file 检查文件是否存在。即使文件是一个目录目录,只有存在,条件就为真。 [ -e $file ] is true.

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)