运维界的卡乐咪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分支与循环结构

if语句是实际生产工作中最重要且最常用的语句,所以,必须掌握牢固。

if条件句分单分支结构、双分支结构、多分支结构

单分支结构

语法:

if  [ 条件 ]

  then

    指令

fi

if  [ 条件 ];then

  指令

fi

提示:分号相当于命令换行,上面两种语法等同。

前文的文件条件表达式[ -f "$file1" ]&& echo 1就相当于下面的if语句。

if [ -f "$fiel1" ];then

  echo 1

fi

 双分支结构

语法:

if  [ 条件 ]

  then

    指令集1

else

    指令集2

fi

提示:前文的文件条件表达式[ -f "$file1" ]&&echo 1||echo 0就相当于双分支的

if[ -f "$file1"]

  then

    echo 1

else

    echo 0

fi

多分支结构

if [ 条件1 ]

  then

    指令

elif [ 条件2 ]

  then

    指令

  ...

else

    指令

提示:

1)注意多分支elif的写法elif条件;then,不要落下then

2)结尾的else后面没有then

实例1:用if双分支实现对Nginx或MySQL服务是否正常判断,使用进程数、端口、URL的方式判断,如果进程没起,把进程启动。

课后作业:

  1、监控web服务是否正常,不低于5种思路

  2、监控db服务是否正常,不低于5种思路

方法:web服务和数据库db共同方法:

  1.端口

    本地:netstat/ss/lsof

    远程:telnet/nmap/nc

  注:telnet命令测试网络端口推荐使用方法

  [root@localhost ~]# echo -e "\n"|telnet baidu.com 80|grep Connected
  Connection closed by foreign host.
  Connected to baidu.com.
  nmap推荐使用方法nmap www.qq.com - 80|grep open |wc -l

  2.进程(本地)

  ps -ef|grep mysql|wc -l

  3.wget/curl (http方式,判断根据返回值或者返回内容)

  4.header(http),(http方式,根据状态码判断)

  5.数据库特有,通过mysql客户端连接,根据返回值或返回内容。

    

以DB为例:

#!/bin/sh
if [ "`netstat -tlunp|grep 3306|awk -F"[ :]+" '{print $5}'`" = "3306" ]
  then
        echo "Mysql is running"
else
        echo "Mysql is stopped"
        /etc/init.d/mysql start
fi
注意:在shell中反单引号``的作用,反引号包含内的字符会被作为shell命令来进行输出

 

用if语句监控web服务:

#!/bin/sh
if [ " `curl -I -s -o /dev/null -w "%{http_code}\n" http://www.baidu.com` " -eq "200" ]
  then
    echo "Httpd is running"
else
    echo "Httpd is stopped"
fi

实例:实现通过传参的方式往/etc/user.conf里添加用户,具体要求如下:

1)命令用法:

USAGE:sh adduser {-add|-del|-search} username

2)传参要求:

如果参数为-add时,表示添加后面接的用户名,

如果参数为-del时,表示删除后接的用户名,

如果参数为-search时,表示查找后面接的用户名,

3)如果有同名的用户则不能添加,没有对应用户则无需删除,查找到用户以及没有用户时给出明确提示

4) /etc/user.conf不能被所有外部用户直接删除及修改

 

实例:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改),如果有就打印改动文件名(发邮件),定时任务每3分钟执行一次(10分钟时间完成)。

思路:文件修改特征:

  a、大小可能会变化

  b、修改时间会变化,(文件测试符ot,nt)

  c、文件内容会变化 md5sum指纹

  d、增加或删除文件

获取文件md5方式:

root@localhost ~]# find /root/person.txt -type f |xargs md5sum
f975c3ca87810c5763d8f673fffc7836  /root/person.txt

将文件的md5列表输出到一个文本find /root/ -type f |xargs md5sum >> /tmp/md5list

使用md5sum -c对列表中的文件md5进行比对:

[root@localhost ~]# md5sum -c /tmp/md5list
/root/person.txt: OK
/root/.bash_logout: OK
/root/.bash_profile: OK
/root/.bashrc: OK
/root/.cshrc: OK
/root/.tcshrc: OK
/root/anaconda-ks.cfg: OK
/root/.bash_history: OK
当文件内容被修改后md5值会发生变化:

[root@localhost ~]# md5sum -c /tmp/md5list
/root/person.txt: FAILED
/root/.bash_logout: OK
/root/.bash_profile: OK
/root/.bashrc: OK
/root/.cshrc: OK
/root/.tcshrc: OK
项目上线后统计文件个数find /root/ -type f |wc -l与之进行比对,可监测文件个数

 

posted on 2020-02-27 19:33  卡乐咪运维  阅读(449)  评论(0)    收藏  举报