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 然后 -运算符 描述 例子 &plus (加) 在运算符的任一侧添加值 `expr $a &plus $b` 将给出 30 - (减) 从左手操作数中减去右手操作数 `expr $a - $b` 将给出 -10 * (乘) 将运算符两侧的值相乘 `expr $a \* $b` 将给出 200 / (除) 将左手操作数除以右手操作数 `expr $b / $a` 将给出 2 % (模) 将左手操作数除以右手操作数并返回余数 `expr $b % $a` 将给出 0 = (赋值) 在左操作数中分配右操作数 a = $b 会将 b 的值赋给 a == (等于) 比较两个数字,如果两者相同则返回真。 [ $a == $b ] 将返回 false。 != (不等) 比较两个数字,如果两者不同则返回真。 [ $a != $b ] 将返回 true。 理解所有条件表达式都应该在方括号内并在它们周围有空格是非常重要的,例如 [ $a == $b ] 是正确的,而 [$a==$b] 是不正确的。所有算术计算都是使用长整数完成的。 -
关系运算符
Bourne Shell 支持以下特定于数值的关系运算符。这些运算符不适用于字符串值,除非它们的值是数字。例如,以下运算符将用于检查 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 然后 -运算符 描述 例子 ! 这是逻辑否定。这将真条件转换为假,反之亦然。 [ ! 假] 是真的。 -o 这是合乎逻辑的 OR. 如果操作数之一为真,则条件为真。 [ $a -lt 20 -o $b -gt 100 ] 是真的。 -a 这是合乎逻辑的 AND. 如果两个操作数都为真,则条件为真,否则为假。 [ $a -lt 20 -a $b -gt 100 ] 是假的。 -
字符串运算符
Bourne Shell 支持以下字符串运算符。假设变量 a 保存“abc”和变量 b 持有“efg”然后 -运算符 描述 例子 = 检查两个操作数的值是否相等;如果是,则条件变为真。 [ $a = $b ] is not true. != 检查两个操作数的值是否相等;如果值不相等,则条件变为真。 [ $a != $b ] is true. -z 检查给定的字符串操作数大小是否为零;如果长度为零,则返回 true。 [ -z $a ] is not true. -n 检查给定的字符串操作数大小是否非零;如果它是非零长度,则返回 true。 [ -n $a ] is not false. str 检查是否 str不是空字符串;如果为空,则返回false。 [ $a ] is not false. -
文件测试操作符
我们有一些运算符可用于测试与 Unix 文件相关的各种属性。假设一个变量 file 保存一个现有的文件名“test”,其大小为 100 字节,并具有 read, write 和 execute 许可 -运算符 描述 例子 -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 检查文件是否存在;即使 file 是一个目录但存在,也是如此。 [ -e $file ] is true. -
-