1. 程式人生 > 實用技巧 >SHELL使用--if語句

SHELL使用--if語句

目錄

if語句

if單分支

if 條件1;then
    命令1
    命令2
    命令3
    。。。
fi

# 等同於:
[ 條件1 ] && 命令1 

示例1:

  • 檢測硬碟根分割槽的使用率,如果大於70,就輸出警告資訊
#!/bin/bash

# 第一步:獲取硬碟的使用率
disk_use=`df | grep '/$' |awk '{print $5}' | cut -d% -f1`
# 第二步:
if [ $disk_use -gt 70 ];then
    echo "Warning:disk space is not enough"
fi

示例2:

  • 判斷檔案中是否存在root使用者
===========================版本1===========================
#!/bin/bash

grep "^root" /etc/passwd &>/dev/null
if [ $? -eq 0 ];then
    echo "Y"
else
    echo "N"
fi
===========================版本1===========================
#!/bin/bash

if grep "^root" /etc/passwd &>/dev/null;then
    echo "Y"
else
    echo "N"
fi

if雙分支

if 條件1;then
    命令1
    命令2
    命令3
    。。。
else
    命令1
    命令2
    命令3
    。。。 
fi

# 等同於:
[ 條件1 ] && 命令1 || 命令2

示例1:

  • 登入使用者和密碼匹配進行登入
#!/bin/bash

read -p "使用者名稱>>: " name
read -p "密碼>>: " pass

if [ $name == "egon" ] && [ $pass == "123" ];then
    echo "登入成功"
else
    echo "賬號或密碼輸入錯誤"
fi

if多分支

if 條件1;then
    命令1
    命令2
    命令3
    。。。
elif 條件2;then
    命令1
    命令2
    命令3
    。。。
elif 條件2;then
    命令1
    命令2
    命令3
    。。。 
...
else
    命令1
    命令2
    命令3
    。。。 
fi

示例1:

  • 獲取硬碟根分割槽的使用率,根據比較輸出不同級別的日誌
#!/bin/bash

#1、獲取硬碟根分割槽的使用率
disk_use=`df | grep '/$' |awk '{print $5}' | cut -d% -f1`

#2、根據比較輸出不同級別的日誌
if [ $disk_use -ge 90 ];then  # >=90
    echo "Critical:disk space is full"
elif [ $disk_use -ge 70 -a $disk_user -lt 90 ];then  # >=70 <90
    echo "Error:disk space will be full"
elif [ $disk_use -ge 50 -a $disk_user -lt 70 ];then  # >=50 < 70
    echo "Warning:disk space is not enough"
else
    echo "info:disk space is ok"
fi


==============================改進===========================
#!/bin/bash

#1、獲取硬碟根分割槽的使用率
#disk_use=`df | grep '/$' |awk '{print $5}' | cut -d% -f1`
#disk_use=99
#disk_use=73
#disk_use=53
disk_use=30

#2、根據比較輸出不同級別的日誌
if [ $disk_use -ge 90 ];then  # >=90
    echo "Critical:disk space is full"
elif [ $disk_use -ge 70 ];then  # >=70 <90
    echo "Error:disk space will be full"
elif [ $disk_use -ge 50 ];then  # >=50 < 70
    echo "Warning:disk space is not enough"
else
    echo "info:disk space is ok"
fi

示例2:

  • 數字猜大小
#!/bin/bash
# 首先判斷這個值必須為一個值,並且為數字
[ $# -ne 1 ] && echo "必須輸入1個引數" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "必須輸入數字" && exit
 
if [ $1 -gt 18 ];then
    echo "too big"
elif [ $1 -lt 18 ];then
    echo "too small"
else
    echo "you got it"
fi

示例3:

  • 判斷檔案型別
#!/bin/bash
# 首先判斷這個值必須為一個引數
[ $# -ne 1 ] && echo "必須輸入1個引數" && exit
 
if [ -L $1 ];then
    echo "是一個連結檔案"
elif [ -d $1 ];then
    echo "是一個目錄檔案"
elif [ -f $1 ];then
    echo "是一個標準檔案"
else
    echo "其他型別的檔案"
fi

示例4:

  • 啟動服務指令碼
#!/bin/bash
netstat -an | grep '\bLISTEN\b' | grep '\b80\b' &>/dev/null
if [ $? -eq 0 ];then
    echo "80埠的服務正常"
else
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "80埠啟動成功"
    else
        echo "80埠啟動失敗"
    fi    
fi

示例5:

  • 監控指令碼

  • 實現:

    根分割槽剩餘空間小於10%
    記憶體的剩餘空間小於30%
    向用戶egon傳送告警郵件,郵件的內容包含使用率相關資訊

#!/bin/bash

# 1、獲取根分割槽的剩餘空間
disk_use=`df | grep '/$' | awk '{print $5}' | cut -d% -f1`

# 2、獲取記憶體的剩餘率
mem_free=`free | grep 'Mem' |awk '{print $4}'`
mem_total=`free | grep 'Mem' |awk '{print $2}'`
mem_free_percent=`echo "scale=2;$mem_free / $mem_total" |bc |cut -d. -f2`

# 3、判斷+報警
if [ $disk_use -gt 90 ];then
    echo "硬碟使用率${disk_use}%,不夠用啦,請及時處理" | mail -s "磁碟報警" [email protected]
fi

if [ $mem_free_percent -lt 30 ];then
    echo "記憶體剩餘率${mem_free_percent}%,不夠用啦,請及時處理" | mail -s "記憶體報警" [email protected]
fi

·# tell you一個小細節
當經常對郵箱傳送郵件容易被當成垃圾郵件直接傳送至垃圾箱中,可以將主機名改為tcy.xxx.com這種格式