概述
这篇文档稍微介绍一下Shell中的运算符和表达式,了解他们的基础用法,这是很有必要的。
运算符
Shell中的运算符有很多种,包括:
- 算术运算符:
+
-
*
/
%
- 关系运算符:
==
!=
<
>
<=
>=
- 逻辑运算符:
!
&&
||
表达式
表达式是由运算符和变量组成的语句,用来计算值。表达式的语法如下:
1 | [ $var1 ] && [ $var2 ] || [ $var3 ] |
- 运算符:
&&
和||
用来连接多个表达式,只有当第一个表达式为真时,才会计算第二个表达式;只有当第一个表达式为假时,才会计算第三个表达式。 - 变量:
$var1
$var2
$var3
是Shell中的变量,用来存储值。 - 表达式:
[ $var1 ]
$var1
是表达式,用来计算$var1
的值。
运算符优先级
运算符的优先级决定了表达式的计算顺序。
- 先乘除
%
/
*
- 后加减
+
-
- 先关系运算符
<
>
<=
>=
==
!=
- 后逻辑运算符
!
&&
||
另外一种运算符
在shell中还有一种运算符,就是-ge
-gt
-le
-lt
-eq
-ne
...
这些用来比较两个数值的运算符。
-ge
-gt
-le
-lt
-eq
-ne
这些运算符用来比较两个值,返回true或者false。
1 | if [ $num1 -ge $num2 ]; then |
-ge
这个运算符的意思是“大于等于”,表示两个数值相等时返回true。-gt
这个运算符的意思是“大于”,表示第一个数值大于第二个数值时返回true。-le
这个运算符的意思是“小于等于”,表示两个数值相等时返回true。-lt
这个运算符的意思是“小于”,表示第一个数值小于第二个数值时返回true。-eq
这个运算符的意思是“等于”,表示两个数值相等时返回true。-ne
这个运算符的意思是“不等于”,表示两个数值不相等时返回true。- 这些运算符可以用来比较两个数值,返回true或者false。
-f
这个运算符用来判断文件是否存在,如果文件存在返回true,否则返回false。-d
这个运算符用来判断目录是否存在,如果目录存在返回true,否则返回false。-e
这个运算符用来判断文件或者目录是否存在,如果存在返回true,否则返回false。-z
这个运算符用来判断字符串是否为空,如果字符串为空返回true,否则返回false。-n
这个运算符用来判断字符串是否不为空,如果字符串不为空返回true,否则返回false。-r
这个运算符用来判断文件是否可读,如果文件可读返回true,否则返回false。-w
这个运算符用来判断文件是否可写,如果文件可写返回true,否则返回false。-x
这个运算符用来判断文件是否可执行,如果文件可执行返回true,否则返回false。-s
这个运算符用来判断文件是否为空,如果文件不为空返回true,否则返回false。-o
这个运算符用来判断当前用户是否是文件所有者,如果是返回true,否则返回false。-G
这个运算符用来判断文件所有者的组是否与当前用户的组相同,如果相同返回true,否则返回false。-L
这个运算符用来判断文件是否为符号链接,如果是符号链接返回true,否则返回false。-S
这个运算符用来判断文件是否为socket,如果是socket返回true,否则返回false。-u
这个运算符用来判断文件是否设置了setuid位,如果设置了返回true,否则返回false。-g
这个运算符用来判断文件是否设置了setgid位,如果设置了返回true,否则返回false。-k
这个运算符用来判断文件是否设置了sticky位,如果设置了返回true,否则返回false。-t
这个运算符用来判断文件是否为终端设备,如果是终端设备返回true,否则返回false。-b
这个运算符用来判断文件是否为块设备,如果是块设备返回true,否则返回false。-c
这个运算符用来判断文件是否为字符设备,如果是字符设备返回true,否则返回false。-p
这个运算符用来判断文件是否为管道,如果是管道返回true,否则返回false。-h
这个运算符用来判断文件是否为符号链接,如果是符号链接返回true,否则返回false。-O
这个运算符用来判断当前用户是否是文件所有者,如果是返回true,否则返回false。-N
这个运算符用来判断文件是否被修改过,如果被修改过返回true,否则返回false。-nt
这个运算符用来判断文件是否比目标文件新,如果文件比目标文件新返回true,否则返回false。-ot
这个运算符用来判断文件是否比目标文件旧,如果文件比目标文件旧返回true,否则返回false。-ef
这个运算符用来判断文件是否和目标文件相同,如果相同返回true,否则返回false。