分支与循环结构
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与之进行比对,可监测文件个数
浙公网安备 33010602011771号