shell的if判断

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

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

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

    then
      指令
  fi

  

if [字符串或算术表达式]
    then
        指令
fi

  

if [[字符串表达式]]
    then        
        指令
fi

  

if ((算术表达式))
    then    
        指令
fi

  

if 命令
    then
        指令
fi

  判断字符串是否为整数

 

[root@BACKUP-1-51 ~]# [ -n "`echo "oldboy123" | sed  's/[0-9]//g'`" ] && echo char || echo int
char
[root@BACKUP-1-51 ~]# [ -n "`echo "123" | sed  's/[0-9]//g'`" ] && echo char || echo int      
int

  

[root@BACKUP-1-51 ~]# k=oldboy123
[root@BACKUP-1-51 ~]# [ -z "${k//[0-9]/}" ] && echo int || echo char    方法2 用子串替换
char
[root@BACKUP-1-51 ~]# k=123
[root@BACKUP-1-51 ~]# [ -z "${k//[0-9]/}" ] && echo int || echo char
int

  

[root@BACKUP-1-51 ~]# expr oldboy + 1 &>/dev/null
[root@BACKUP-1-51 ~]# echo $?
2
[root@BACKUP-1-51 ~]# expr 123 + 1 &>/dev/null      
[root@BACKUP-1-51 ~]# echo $?
0

  

[root@BACKUP-1-51 ~]# [[ 123 =~ ^[0-9]+$ ]] && echo int || echo char  
int
[root@BACKUP-1-51 ~]# [[ oldboy123 =~ ^[0-9]+$ ]] && echo int || echo char
char

  

判断字符串长度是否为0

[root@BACKUP-1-51 ~]# [ -n "oldboy" ] && echo 1 || echo 0
1
[root@BACKUP-1-51 ~]# [ -z "oldboy" ] && echo 1 || echo 0 
0

  

[root@BACKUP-1-51 ~]# k=""
[root@BACKUP-1-51 ~]# echo ${#k}
0
[root@BACKUP-1-51 ~]# k=oldboy
[root@BACKUP-1-51 ~]# echo ${#k}
6
[root@BACKUP-1-51 ~]# [ ${#k} -eq 0 ] && echo 1 || echo 0
0

  

[root@BACKUP-1-51 ~]# k=""
[root@BACKUP-1-51 ~]# expr length "$k"
0
[root@BACKUP-1-51 ~]# [ `expr length "$k"` -eq 0 ] && echo 1 || echo 0
1

  

[root@BACKUP-1-51 ~]# [ `echo oldboy|wc -L`  -eq 0 ] && echo 1 || echo 0
0
[root@BACKUP-1-51 ~]# [ `echo ""|wc -L`  -eq 0 ] && echo 1 || echo 0      
1

  

[root@BACKUP-1-51 ~]# [ `echo oldboy | awk '{print length($0)}'` -eq 0 ] && echo 1 || echo 0
0
[root@BACKUP-1-51 ~]# [ `echo "" | awk '{print length($0)}'` -eq 0 ] && echo 1 || echo 0      
1

  

posted @ 2017-02-20 22:17  黑夜不黑  阅读(209)  评论(0编辑  收藏  举报