if 特殊用法

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

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

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

上面代码块咱们也能够改良为如下代码块,这里咱们就没有嵌套if语句了bash

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

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

#!/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 ~]#

若是不想要将过滤出来的内容输出的话,能够加上-qit

[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…
  • [ ] 中不能使用<,>,==,!=,>=,<=这样的符号
相关文章
相关标签/搜索