SHELL使用--if語句
阿新 • • 發佈:2020-08-27
目錄
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這種格式