首页 > 系统服务 > 详细

shell的if判断

时间:2017-02-20 22:31:42      阅读:223      评论:0      收藏:0      [点我收藏+]

在[[]](双中括号)中可以使用通配符等进行模式匹配,这是其区别于其他几种语法格式的地方

&& 、||、>、<等操作符可以用于[[]]中,但不能应用于[]中,在[]中一般用-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

[[]]字符串的比较
=~后要跟正则表达式
==和= 后要跟通配符

  

shell的if判断

原文:http://www.cnblogs.com/zyl1314/p/6421841.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!