1. Shell 运算符概述
1.1 Shell 运算符是什么
与其他语言一样,Shell 也有运算符,在 Shell 中其根据类型不同也有不少运算符分类,那么什么是运算符呢?例如大家都知道在算术运算中的加减乘除,+
就是我们 Shell 中的算术运算符的一种,当然还有很多其他的功能各异的运算符,作为条件判断与算术操作等重要功能,构成了 Shell 中的基本元素。
1.2 为什么要用运算符
当我们对数值进行算术运算,当我们需要对文件进行判断,当我们需要多逻辑进行判断的时候,这些情况都需要使用不同类型的运算符,使得我们脚本更为灵活便捷。
2. Shell 运算符分类
我们知道了 shell 中运算符是什么及其功能,接下来让我们看一下 Shell 脚本运算符的分类及每种运算符的基本操作。
2.1 算术运算符
算术运算符顾名思义,其就是进行加减乘除数值运算,在 shell 中,bash 不支持原生的数学运算,需要利用第三方工具来如 let
,expr
等来实现。
2.1.1 let
可以利用 let
对数值进行运算,let C=$A+$B
, 例如:
- 1
- 2
- 3
- 4
- 5
注意:let
运算后需要将其赋值给一个变量。
2.1.2 expr
可以利用 expr
对数组进行运算,C=$(expr $A+$B)
,例如:
- 1
- 2
- 3
注意 +
号两边需要有空格,不然会将其当作字符串连接
2.1.3 []
可以利用 []
来对数值进行运算,C=[A+B]
,例如:
- 1
- 2
- 3
2.1.4 (())
利用 (())
来对数值进行运算,C=$(($A+$B))
,例如:
- 1
- 2
- 3
2.2 关系运算符
了解了算术运算,接下来让我们学习关系运算。
关系运算顾名思义就是比较数字的大小,注意关系运算符作用的为数字,不能用其来比较字符串。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
运行结果为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.3 布尔运算符
布尔运算符也就是我们常说的与或非
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
返回结果为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
2.4 逻辑运算符
逻辑运算符为,以下介绍 Shell 的逻辑运算符,假定变量 A 为 1,变量 b 为 2:
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
返回:
- 1
- 2
- 3
- 4
2.5 字符串运算符
对于字符串进行一些判断操作,假定变量 a 为 “linux”,变量 b 为 “shell”:
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
返回为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.6 文件测试运算符
文件测试在我们编写 shell 中与文件操作非常常用,熟练掌握文件操作可以在后续的 shell 编写中得心应手,例如 file 变量为:
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
返回为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3. 实例
3.1 需求
编写一个脚本,传入一个 linux 文件系统的路径,判断其下面文件及目录的数量。
3.2 思路
可以利用文件测试运算符来判断输出的目录是否正确,之后利用算术运算符配合数组对文件或目录进行统计。
3.3 实现
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
当我们不输入任何参数的时候,提示需要输入一个路径参数,输入了文件名称或不存在的路径时,文件测试运算符判断输入异常,不是一个有效的文件目录。
当我们输入正常的目录时,即可获得正确的目录或文件数。
4. 注意事项
- 对于算术运算,大家可以根据具体场景和环境来选择,例如系统内没有计算工具等,可以优先选择
[]
和(())
来进行,也可以根据自己喜好选择; - 对于关系运算,比较的数字,不是字符串,一定要牢记这个注意点,对于字符串判断可以用字符串运算符;
- 对于布尔运算和逻辑运算其实是一个东西,只不过布尔运算符有一个非运算,可以进行灵活运用;
- 文件测试符常用与判断 linux 系统文件的操作,在后期 shell 编程可谓举足轻重,牢记每个文件运算符会使得后期编程得心应手。
5. 小结
运算符可谓 Shell 脚本的灵魂,后期我们的循环和判断里面的条件都是这些运算符构成,它是流程框架的基础,熟练掌握运算符的分类及每个的用法,通过动手实践区分其特征,举一反三灵活运用。