1、算术操作符
2、关系操作符
3、布尔操作符
4、字符串操作符
5、文件相关操作符
算术操作符
bash shell 没有提供任何机制来执行简单的算术运算,不过我们可以借助于一些其他程序,如 expr
#!/bin/sh val=`expr 2 + 2` echo "Total value : $val"
注意:在操作符与表达式之间必须有空格,整个表达式应该用反引号括起来。
其他可用算术操作符:
+:`expr 10 + 20`
-:`expr 10 - 20`
*: `expr 10 \* 20` (需要转义乘号)
/: `expr 10 / 2`
%: `expr 10 % 3`
=: (赋值) a = $b,将 b 的值赋予 a
==: [ $a == $b ] 判断两个数是否相等,相等返回 true
!=: [ $a != $b ] 判断两个数是否不想等,不想等返回 true
注意:所有的条件表达式里面的变量、操作符都需要有逗号分隔。至于为什么这样,个人觉得是类似于 $1, $2 ... $n,这种参数获取方式,如果连在一起,可能系统就把这连在一起的两个当作一个操作数什么的。
关系操作符
-eq:判断两个操作对象是否相等,例:[ $a -eq $b ]
-ne:判断两个操作对象是否不想等,例:[ $a -ne $b ]
-gt:判断第一个操作对象是否大于第二个操作对象,例:[ $a -gt $b ]
-lt:判断第一个操作对象是否小于第二个操作对象,例:[ $a -lt $b ]
-ge:[ $a ge $b ],判断 $a 是否大于等于 $b
-le: [ $a le $b ],判断 $a 是否小于等于 $b
逻辑操作符
-a:与,[ $a -lt 20 -a $b -gt 100 ] ,$a 小于 20 且 $b 大于 100 的时候返回 true
-o:或,[ $a -lt 20 -o $b -gt 100 ] ,$a 小于 20 或 $b 大于 100 的时候返回 true
!:非,[ ! false ] 返回 true
字符串比较
=:[ $a = $b ],判断 $a 与 $b 是否相等,注意不是 "=="
!=:[ $a != $b ],判断 $a 与 $b 是否不想等
-z:判断字符串长度是否为0,[ -z $a ],如果 $a 长度为0返回 true
-n:判断字符串长度是否不为0,[ -n $a ],如果 $a 长度不为0返回 true
str:[ $a ],字符串里面如果全是空格,会返回 false," " => false,获取字符串长度的方法:${#str}
暂时不知道 -z 和 -n 的具体用法,上面的 -z 和 -n,在字符串长度不为 0 的时候 -z 也返回了 true。
文件相关判断符
-b:判断文件是不是 block special 文件,硬盘分区是 block special 文件,如:[ -b /dev/disk1s1 ] 会返回 true。
-c:判断文件是不是 character special 文件,[ -c $file ]
-d:判断是不是 目录
-f:判断是不是普通文件,而不是目录或特殊文件
-g:判断文件是否设置了 SGID(Set GID)
-k:判断文件是否设置了 SBIT(Sticky Bit)
-p:判断文件是否是命名管道
-t:判断文件描述符是否是打开状态并且关联了终端
-u:判断文件是否设置了 SUID(Set User ID)
-r:判断文件是否可读
-w:判断文件是否可写
-x:判断文件是否可执行
-s:判断文件的大小是否大于 0
-e:判断文件是否存在