if 特殊用法

  • if [ -z "$a" ]  这个表示当变量a的值为空时会怎么样
    我们假设以下场景,判断一个文件的行数,当行数大于100时,返回一个值
#!/bin/bash
n=`wc -l /tmp/wrsfsf`
if [ $n -gt 100 ]
then
  echo deo 
fi

上面场景假设的前提是这个文件存在,但是如果在生产环境中,这个文件被误删除,也就是这个文件不存在时,就会出现以下提示:
输入图片说明
因此我们需要嵌套一个if语句来先判断下这个文件是否存在,并且要注意加上双引号,只有加上双引号才会生效,如下

#!/bin/bash
n=`wc -l /tmp/wrsfsf`
if [ -z "$n" ]
then
  echo error
else
  if [ $n -gt 100 ]
  then
    echo deo
  fi
fi

上面代码块我们也可以改良为以下代码块,这里我们就没有嵌套if语句了

#!/bin/bash
n=`wc -l /tmp/wrsfsf`
if [ -z "$n" ]
then
  echo error
  exit
elif [ $n -gt 100 ]
then    
  echo deo
fi

以下再来修改一下,修改为首先判断这个文件是否存在,如果不存在,就返回一个结果并退出脚本

#!/bin/bash
if [ ! -f /tmp/wrsfsf ]
then
  echo /tmp/wrsfsf not exist
  exit
fi
n=`wc -l /tmp/wrsfsf`
if [ -z "$n" ]
then
  echo error
  exit
elif [ $n -gt 100 ]
then
  echo deo
fi
  • if [ -n "$a" ] 表示当变量a的值不为空
    这里 -n 和前面的-z是正好相反的,既可以判断变量有可以判断文件是否不为空,变量需要用引号引起来,如果-n后面跟的是文件,则不需要用引号
    下面这条语句判断的是已知存在的文件file1.sh,当这个文件内容不为空的时候,返回ok
[root@lijie-01 ~]# ls
11.txt  1.txt~  anaconda-ks.cfg  bb.txt  file1.sh  ifi2.sh  lijie.txt  ??????.pdf  sim.pid
123     1.txz~  a.txt            b.txt   file2.sh  ifi3.sh  log        sed         temp
1.txt   3.txt   awk              fi2.sh  grep      ifi.sh   logs       shell
[root@lijie-01 ~]# if [ -n file1.sh ];then echo ok;fi
ok
[root@lijie-01 ~]#

再来判断下当变量的值不为空的时候,

[root@lijie-01 ~]# echo $c 
[root@lijie-01 ~]# if [ -n "$c" ];then echo $c;else echo "c is null";fi
c is null
[root@lijie-01 ~]# 
  • if grep -q '123' 1.txt; then  表示如果1.txt中含有'123'的行时会怎么样
    这里我们是将一条语句的执行结果作为if语句的判断条件,上面命令中的-q表示不展示grep过滤出来的内容,比如判断某个文件中是否含有某个字符串,例如判断系统用户中是否有zabbix这个用户 ,一般我们想到的是以下方式,其中-w表示过滤的是单词zabbix
[root@lijie-01 ~]# grep -w 'zabbix' /etc/passwd   
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
[root@lijie-01 ~]#

下面我们就可以根据这个结果来进行判断,并输出想要的结果

[root@lijie-01 ~]# if grep -w 'zabbix' /etc/passwd;then echo zabbix exist;fi
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
zabbix exist
[root@lijie-01 ~]# 

如果不想要将过滤出来的内容输出的话,可以加上-q

[root@lijie-01 ~]# if grep -wq 'zabbix' /etc/passwd;then echo zabbix exist;fi
zabbix exist
[root@lijie-01 ~]#
  • if [ ! -e file ]; then 表示文件不存在时会怎么样
  • if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…
  • [ ] 中不能使用<,>,==,!=,>=,<=这样的符号

猜你喜欢

转载自my.oschina.net/u/3746774/blog/1797591
今日推荐