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…
  • [ ] 中不能使用<,>,==,!=,>=,<=這樣的符號
相關文章
相關標籤/搜索