Unix 简明教程

Unix / Linux - Shell Basic Operators

每个 shell 都支持各种运算符。我们将在本章详细讨论 Bourne shell(默认 shell)。

我们现在将讨论以下运算符 -

  1. Arithmetic Operators

  2. Relational Operators

  3. Boolean Operators

  4. String Operators

  5. File Test Operators

Bourne shell 最初没有任何执行简单算术运算的机制,但它使用外部程序,要么是 awk ,要么是 expr

以下示例显示了如何添加两个数字 -

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

上述脚本会生成以下结果 -

Total value : 4

在添加时需要考虑以下几点 -

  1. 运算符和表达式之间必须有空格。例如,2+2 不正确;应写成 2 + 2。

  2. 完整的表达式应包含在 ‘ ‘ 之间,称为反引号。

Arithmetic Operators

Bourne Shell 支持以下算术运算符。

假设变量 a 为 10,变量 b 为 20,那么 -

Operator

Description

Example

+ (Addition)

添加运算符两侧的值

expr $a + $b 将得到 30

- (Subtraction)

从左操作数中减去右操作数

expr $a - $b 将得到 -10

* (Multiplication)

乘以运算符两侧的值

expr $a \* $b 将得到 200

/ (Division)

将左操作数除以右操作数

expr $b / $a 将得到 2

% (Modulus)

将左手操作数除以右手操作数,并返回余数

expr $b % $a 将给出 0

= (Assignment)

将右操作符赋值给左操作符

a = $b 会将 b 的值赋值给 a

== (Equality)

对比两个数字,如果二者相同则返回 true。

[ $a == $b ] 会返回 false。

!= (Not Equality)

对比两个数字,如果二者不同则返回 true。

[ $a != $b ] 会返回 true。

了解到所有条件表达式都应位于带空格的方括号当中非常重要,例如 [ $a == $b ] 是正确的,而 [$a==$b] 是不正确的。

所有算术运算都使用长整数进行。

Relational Operators

Bourne Shell 支持以下特定于数值的关联运算符。这些运算符不适用于字符串值,除非其值为数值。

例如,以下运算符将用于检查 10 和 20 之间的关系以及 "10" 和 "20" 之间的关系,但不用于检查 "ten" 和 "twenty" 之间的关系。

假设变量 a 为 10,变量 b 为 20,那么 -

Operator

Description

Example

-eq

检查两个操作数的值是否相等;如果相等,则条件为 true。

[ $a -eq $b ] 不为 true。

-ne

检查两个操作数的值是否相等;如果值不相等,则条件为 true。

[ $a -ne $b ] 为 true。

-gt

检查左操作数的值是否大于右操作数的值;如果是,则条件变为 true。

[ $a -gt $b ] 不为 true。

-lt

检查左操作数的值是否小于右操作数的值;如果是,则条件变为 true。

[ $a -lt $b ] 为 true。

-ge

检查左操作数的值是否大于或等于右操作数的值;如果是,则条件变为 true。

[ $a -ge $b ] 为假。

-le

检查左操作数的值是否小于或等于右操作数的值;如果是,则条件变为 true。

[ $a -le $b ] 为真。

了解所有条件表达式都应放在方括号中且周围带有空格非常重要。例如, [ $a ⇐ $b ] 正确,而 [$a ⇐ $b] 错误。

Boolean Operators

Bourne Shell 支持以下布尔运算符。

假设变量 a 为 10,变量 b 为 20,那么 -

Operator

Description

Example

!

这是逻辑否定。这会将真条件反转为假,反之亦然。

[ ! false ] 为真。

-o

这是逻辑 OR 。如果其中一个操作数为真,则条件变为真。

[ $a -lt 20 -o $b -gt 100 ] 为真。

-a

这是逻辑 AND 。如果两个操作数都为真,则条件变为真,否则为假。

[ $a -lt 20 -a $b -gt 100 ] 为假。

String Operators

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

假设 a 变量保存了“abc”, b 变量保存了“efg”,则 −

Operator

Description

Example

=

检查两个操作数的值是否相等;如果相等,则条件为 true。

[ $a = $b ] 为假。

!=

检查两个操作数的值是否相等;如果值不相等,则条件变为真。

[ $a != $b ] 为真。

-z

检查给定的字符串操作数大小是否为零;如果长度为零,则返回真。

[ -z $a ] 为假。

-n

检查给定字符串操作数大小是否非零;如果长度不为零,则返回真。

[ -n $a ] 非假。

str

检查 str 是否不是空字符串;如果是空字符串,则返回假。

[ $a ] 非假。

File Test Operators

我们有几个运算符,可用于测试与 Unix 文件关联的各种属性。

假设变量 file 保存现有文件名“test”,其大小为 100 字节,对 − 的权限为 readwriteexecute

Operator

Description

Example

-b file

检查文件是否为块特殊文件;如果是,则条件变为真。

[ -b $file ] 为假。

-c file

检查文件是否为字符特殊文件;如果是,则条件变为真。

[ -c $file ] 为假。

-d file

检查文件是否为目录;如果是,则条件变为真。

[ -d $file ] 非真。

-f file

检查文件是否为普通文件,而不是目录或特殊文件;如果是,则条件变为真。

[ -f $file ] 为真。

-g file

检查文件是否设置了其 set 组 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 Operators

以下链接将给您简要了解 C Shell 算符−

Korn Shell Operators

以下链接帮助您理解康恩壳算符−