在[[]](双中括号)中可以使用通配符等进行模式匹配,这是其区别于其他几种语法格式的地方
&& 、||、>、<等操作符可以用于[[]]中,但不能应用于[]中,在[]中一般用-a -o -gt -lt代替上述操作符。
-d directory 文件存在且为目录则为真
-f file 文件存在且为普通文件则为真
-e exist 文件存在则为真,不辨别是目录还是文件
-r read 文件存在且可读则为真
-s size 文件存在且文件大小不为0则为真
-w write 文件存在且可写则为真
-x executable 文件存在且可执行则为真
-L link 文件存在且为链接文件则为真
f1 -nt f2 newer than 文件f1比文件f2新则为真。根据文件的修改时间来计算
f1 -ot f2 older than 文件f1比文件f2旧则为真。根据文件的修改时间来计算
[root@BACKUP-1-51 scripts]# echo $oldgirl [root@BACKUP-1-51 scripts]# [ -f $oldgirl ] && echo 1 || echo 0 1 [root@BACKUP-1-51 scripts]# [ -f "$oldgirl" ] && echo 1 || echo 0 0 测试变量的时候要加上双引号否则会出问题 如果是文件实体路径,那么加引号和不加引号的结果是一样的。
[条件1] && {
命令1
命令2
命令3
}
上面的判断相当于下面If语句的效果
if [条件1]
then
命令1
命令2
命令3
fi
字符串测试操作符
-n "字符串" 若字符串的长度不为0,则为真。 no zero
-z "字符串" 若字符串的长度为0则为真 zero
“串1” = “串2” 若字符串1等于字符串2,则为真 可使用 == 代替 =
“串1” != “串2” 若字符串1不等于字符串2 则为真 不可以使用!== 代替!=
判断字符串一定要给字符串加上双引号否则会出现问题;如下
[root@BACKUP-1-51 scripts]# var="" [root@BACKUP-1-51 scripts]# [ -n "$var" ] && echo 1 || echo 0 0 [root@BACKUP-1-51 scripts]# [ -n $var ] && echo 1 || echo 0 1
整数二元比较符
在[]以及test中使用的比较符号 在(())和[[]]中使用的比交符
-eq ==或= 相等 equal
-ne != 不相等 no equal
-gt > 大于 greater than
-ge >= 大于等于 greater equal
-lt < 小于 less than
-le <= 小于等于 less equal
逻辑操作符
在[]和test中使用的操作符 在[[]]和(())中使用的操作符
-a && and 与
-o || or 或
! ! not 非
-a和-o 逻辑操作符号需要用于[]中
&&和||逻辑操作符号可用于[[]] (())中,也可以在外部连接多个[]
[root@BACKUP-1-51 scripts]# k=1.jpg [root@BACKUP-1-51 scripts]# [[ "$k" =~ *.jpg ]] && echo 1 || echo 2 2 [root@BACKUP-1-51 scripts]# [[ "$k" =~ .*.jpg ]] && echo 1 || echo 2 1 [root@BACKUP-1-51 scripts]# [[ "$k" == .*.jpg ]] && echo 1 || echo 2 2 [root@BACKUP-1-51 scripts]# [[ "$k" == *.jpg ]] && echo 1 || echo 2 1 [[]]字符串的比较 =~后要跟正则表达式 ==和= 后要跟通配符
原文:http://www.cnblogs.com/zyl1314/p/6421841.html