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
/(Division)用左手操作数除左手操作数`expr $ b/$ a`将给2
%(模数)用左手操作数除左手操作数并返回余数`expr $ b%$ a`将给0
=(Assignment)在左操作数中指定右操作数a = $ b会将b的值赋值为
==(Equality)比较两个数字,如果b oth相同然后返回true.[$ a == $ b]将返回false.
!=(不等于)比较两个数字,如果两个数字不同则返回true.[$ a!= $ b]将返回true.

了解所有条件非常重要表达式应该在方括号内,并且周围有空格,例如 [$ a == $ b] 是正确的,而 [$ a == $ b] 是不正确的.

所有算术计算都是使用长整数完成的.

关系运算符

Bourne Shell支持以下内容特定于数值的关系运算符.这些运算符不适用于字符串值,除非它们的值是数字.

例如,以下运算符将用于检查10到20之间以及"10"和"之间"之间的关系. 20"但不在"十"和"二十"之间.

假设变量 a 持有10而变量 b 持有20然后 :

运算符Description示例
-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 .如果其中一个操作数为true,则条件成立.[$ a -lt 20 -o $ b -gt 100]为真.
-a 这是合乎逻辑的 AND 的.如果两个操作数均为真,则条件变为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 检查 str 是否不是空字符串;如果为空,则返回false.[$ a]不为假.

文件测试运算符

我们有一些运算符可用于测试与Unix文件相关的各种属性.

假设变量文件包含现有文件名"test",其大小为100字节并且读取写入并且执行许可&

运算符描述示例
-b file 检查文件是否为块特殊文件;如果是,则条件成立.[-b $ file]为false.
-c file 检查文件是否为字符特殊文件;如果是,则条件成立.[-c $ file]为false.
-d file 检查文件是否是目录;如果是,则条件成立.[-d $ file]不为真.
-f file 检查文件是普通文件而不是目录或特殊档案;如果是,则条件成立.[-f $ file]为真.
-g file 检查文件是否设置了组ID(SGID)位;如果是,则条件成立.[-g $ file]为false.
-k file 检查文件是否设置了粘滞位;如果是,则条件成立.[-k $ file]为false.
-p file 检查文件是否为命名管道;如果是,则条件成立.[-p $ file]为false.
-t file 检查文件描述符是否已打开并与终端关联;如果是,则条件成立.[-t $ file]为false.
-u file 检查文件是否设置了设置用户ID(SUID)位;如果是,则条件成立.[-u $ file]为false.
-r file 检查文件是否可读;如果是,则条件成立.[-r $ file]为真.
-w file 检查文件是否可写;如果是,那么条件成立.[-w $ file]为真.
-x file 检查文件是否可执行;如果是,则条件成立.[-x $ file]为真.
-s file 检查文件的大小是否大于0;如果是,则条件成立.[-s $ file]为真.
-e file 检查文件是否存在;即使file是目录但存在也是如此.[-e $ file]为真.

C Shell运算符

以下链接将简要介绍C Shell运算符 :

C Shell Operators

Korn Shell运营商

以下链接可帮助您了解Korn Shell Operators :

Korn Shell Operators