分支與循環結構

分支與循環結構

if語句是實際生產工做中最重要且最經常使用的語句,因此,必須掌握牢固。 mysql

if條件句

if條件句語法

  • 單分支結構

語法 nginx

  1. if [ 條件 ]
  2.   then
  3.     指令
  4. fi
  5. if [ 條件 ];then
  6.     指令
  7. fi

條件表達式[ -f "$file1" ]&& echo 1,至關於下面的if語句。 web

  1. if [ -f "$file1" ];then
  2.     echo 1
  3. fi
  • 雙分支結構
  1. if [ 條件 ]
  2.   then
  3.     指令集1
  4. else
  5.     指令集2
  6. fi

條件表達式[ -f "$file1" ]&& echo 1||echo 0,至關於雙分支if [ -f "$file1" ];then echo 1;else echo 0;fi。 sql

  • 多分支結構
  1. if 條件
  2.   then
  3.     指令
  4. elif 條件
  5.   then
  6.     指令
  7. elif 條件
  8.   then
  9.     指令
  10.     ...
  11.   else
  12.     指令
  13. fi

單分支if條件句

開發shell腳本判斷系統剩餘內存的大小,若是低於100M就郵件報警給管理員,並加入系統定時任務每三分鐘執行一次檢查。 shell

free -m|awk 'NR==2{print $4}' 數據庫

  1. [root@lamp ~]# cat free_m.sh
  2. #!/bin/bash
  3.  
  4. FREE=`free -m|awk 'NR==3{print $4}'`
  5. if [ $FREE -lt 100 ]
  6.   then
  7.     echo "warning:The available memory $FREE."
  8.     exit 0
  9. fi
  10. echo "The available memory $FREE."

雙多分支if條件句

用if雙分支實現read讀入的方式比較兩個數的大小。 bash

  1. [root@lamp ~]# cat c3.sh
  2. #!/bin/bash
  3. read -p "Pls input two nums: " num01 num02
  4. [ -z $num01 ]&&{
  5.   echo "the num01 you input must be int."
  6.   exit 2
  7. }
  8. [ -z $num02 ]&&{
  9.   echo "the num02 you input must be int."
  10.   exit 2
  11. }
  12. expr $num01 + $num02 + 1 &>/dev/null
  13. [ $? -ne 0 ]&&{
  14.   echo "the num you input must be int."
  15.   exit 2
  16. }
  17. if [ $num01 -lt $num02 ]
  18.   then
  19.     echo "$num01 < $num02."
  20. elif [ $num01 -gt $num02 ]
  21.   then
  22.     echo "$num01 > $num02."
  23.   else
  24.     echo "$num01 = $num02."
  25. fi

用if雙分支實現對nginx或mysql服務是否正常進行判斷,使用進程數、端口、url的方式判斷,若是進程沒起,把進程啓動。 curl

web服務和數據庫(mysql)的監控方法。 tcp

一、端口監控 this

本地監控:netstat、ss、lsof

遠程監控:telnet、nmap、nc

telnet監控端口

  1. [root@lamp ~]# echo -e "\n"|telnet www.baidu.com 80|grep Connected|wc -l
  2. Connection closed by foreign host.
  3. 1

nmap監控端口

  1. [root@lamp ~]# nmap www.baidu.com -p 80|grep open|wc -l
  2. 1

nc監控端口

  1. [root@lamp ~]# nc -z 192.168.163.128 22|grep succeeded|wc -l
  2. 1

二、進程監控

本地監控:ps -ef|grep mysql|wc -l

三、wget、curl,http方式根據返回值或者返回內容判斷。

四、header(http),http方式根據狀態碼判斷。

五、數據庫特有經過mysql客戶端鏈接,根據返回值或者返回內容判斷。

  1. [root@lamp ~]# cat check_db.sh
  2. #!/bin/bash
  3. #local
  4. if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]
  5. #if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ]
  6. #if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ]
  7. #if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
  8.  
  9. #remote
  10. #if [ `nmap 192.168.1.123 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
  11. #if [ `nc -w 2 192.168.1.123 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ]
  12.   then
  13.     echo "Mysql is Running."
  14. else
  15.     echo "Mysql is Stopped."
  16.     /deta/mysql start
  17. fi

 

  1. [root@lamp ~]# cat check_web.sh
  2. #!/bin/bash
  3. if [ "`curl -I -s -o /dev/null -w "%{http_code}\n" http://192.168.1.123`" = "200" ]
  4. #if [ `curl -I http://192.168.1.123 2>/dev/null|head -1|egrep "200|302|301"|wc -l` -eq 1 ]
  5. #curl -s http://192.168.1.123 &>/dev/null
  6. #if [ $? -eq 0 ]
  7. #if [ "`curl -s http://192.168.1.123 &>/dev/null&&echo $?`" = "0" ]
  8. #if [ "`curl -s http://192.168.1.123`" = "bbs" ]
  9.   then
  10.     echo "httpd is running."
  11. else
  12.     echo "httpd is stopped."
  13. fi

 

經過傳參的方式往/etc/user.conf裏添加用戶,具體要求以下:

一、命令用法:USAGE:sh adduser {-add|-del|-search} username

二、傳參要求:若是參數爲-add,表示添加後面接的用戶名;若是參數爲-del,表示刪除後面接的用戶名;若是參數爲-search,表示查找後面接的用戶名。

三、若是有同名的用戶則不能添加,沒有對應用戶則無需刪除,查找到用戶以及沒有用戶時給出明確提示。

四、/etc/user.conf不能被全部外部用戶之間刪除或修改。

  1. [root@lamp ~]# cat user.sh
  2. #!/bin/bash
  3. ROOT_UID=0
  4.  
  5. if [ "$UID" -ne "$ROOT_UID" ]
  6.   then
  7.     echo "Mast be root to run this script."
  8.     exit 1
  9. fi
  10. if [ $# -ne 2 ]
  11.   then
  12.     echo "USAGE:sh $0 {-add|-del|-search} username."
  13.     exit 2
  14. fi
  15. check=$1
  16. name=$2
  17. if [ "$check" = "add" ]
  18.   then
  19.     result=`cat /etc/user.conf|grep -Fx "$name"`
  20.     [ -z $result ]&&{
  21.       echo "$name" >> /etc/user.conf
  22.       echo "user add "$name" is ok."
  23.       exit 0
  24.     }
  25.     echo "user $name is in."
  26.     exit 0
  27. elif [ "$check" = "del" ]
  28.   then
  29.     result=`cat /etc/user.conf|grep -Fx "$name"`
  30.     [ -z $result ]&&{
  31.       echo "user "$name" not find."
  32.       exit 0
  33.     }
  34.     sed -ri /^$name$/d /etc/user.conf
  35.     echo "user del "$name" is ok."
  36. elif [ "$check" = "search" ]
  37.   then
  38.     result=`cat /etc/user.conf|grep -Fx "$name"`
  39.     [ -z $result ]&&{
  40.       echo "user $name not find."
  41.       exit 0
  42.     }
  43.     echo $result
  44.     exit 0
  45. else
  46.     echo "USAGE:sh $0 {-add|-del|-search} username."
  47.     exit 1
  48. fi

 

獲取文件md5值,防篡改。

  1. [root@lamp ~]# find ./ -type f|xargs md5sum

將md5值寫入文件。

  1. [root@lamp ~]# find ./ -type f|xargs md5sum >/tmp/md5list

比較md5值。

  1. [root@lamp ~]# md5list -c /tmp/md5list
相關文章
相關標籤/搜索