1、文件比较与判断操作符
1).文件和目录
-e:文件是否存在,存在为真,不存在为假;[ -e ./a.c ] && echo "-e";
-f:是否是普通文件,是为真,不是为假,同时也可以检查文件是否存在(必须确定是普通文件);
-d:是否是文件夹,是为真,不是为假,同时也可检查文件夹是否存在;
-c:是否字符设备文件;
-b:是否块设备文件;
-L或-h:是否是一个软链接;
-S:是否是socket文件;
-p:是否是pipe或FIFO文件;
2).文件属性
-r:文件是否可读,可读为真;
-w:文件是否可写,可写为真;
-x:文件是否可执行,可执行为真;
-s:是否是非空文件,非空为真;
-k:文件是否设置了sticky位;
-u:文件是否具有SUID的属性;
-g:文件是否具有SGID的属性;
-t fd:fd是否是跟终端(默认为1)相关联的打开的文件描述符;
3).两个文件之间
-nt:第一个文件比第二个文件新
-ot:第一个文件比第二个文件旧
-ef:两个文件为同一个文件
2、整数比较操作符:
-lt:小于;
-gt:大于;
-eq:等于;
-ne:不等于;
-le:小于等于;
-ge:大于等于;
3、字符串比较操作符:
= :等于
!=:不等于;
\<:小于;
\>:大于;
-z:是否为空字符串;
-n:是否为非空字符串;
注意:'<','>'比较字符串大小时需要加转义字符'\'。比较字符串大小时,以ASC码值做比较。
4、逻辑判断操作符(同一个条件判断表达式内):
-o:或;
-a:(与;
! :非;
而逻辑运算符 && ,|| 用于不同表达式之间。
5、test、[[ ]]与[ ]的区别:
shell中test命令和[ ]、[[ ]]都是用于测试表达式的真假,表达式返回0为真,非零为假。其中test和[ ]语法语义均一样,只是命令形式有区别,一般常使用[ ]而不用test。[[ ]]与[ ]则有一些区别,具体而言有如下区别:
1)、[[ ]]中使用“&&”和"||"来表示“与”和“或”,而[ ] 中使用“-a”和"-o"。
2)、[[ ]]中字符串比较大小用'>' '<'不需要转义,而[ ]中需要转义。
3)、[[ ]]中可以进行整数算术运算扩展,而[ ]不行。
4)、[[ ]]中可以使用shell文件名正则表达式,[ ]中不能。
总体而言,[[ ]]更接近C语言的语法习惯。