一 if条件判断
重点掌握: 实际'生产环境'中使用'最频繁'
① 单分支结构
if <条件表达式>;then
指令
fi
备注:'推荐'使用这种-->'命令行'也是这种
++++++'等价形式'++++++
if <条件表达式>
then
指令
fi
条件表达式部分: test、'[](常用)'、'[[]](使用正则)'、'(())(单纯数字比较)'、'cmd(命令-->常用)'
备注: '多条件'在'不同符号'之间的'区别'
② 双分支结构
if <条件表达式>;then
指令一
else
指令二
fi
③ 多分支结构
注意:是elif而不是elseif,记住四个字母即可,并且后面也要跟then
④ 等价变换
#!/bin/bash
# [ -f /etc/hosts ] && echo 1
if [ -f /etc/hosts ];then
echo 1
fi
# 核心:思路的转换!
⑤ 监控内存
#!/bin/bash
# 需求:开发shell脚本判断系统剩余内存的大小,如果低于100M就邮件报警给管理员,并加入系统定时任务每三分钟执行一次检查
#(1)获取可用内存的大小--->核心
avaible_free=`free -m|awk 'NR==2{print $NF}'`
#(2)阈值判断
if [ $avaible_free -lt 100 ]
then
echo "当前内存太小,不够使用,正在发送" && mail -s "title" wzj@qq.com #后续自己搭建邮件服务器!
fi
#(3)把上述脚本加入crond定时任务,每分钟检查一次,达到阈值报警
# */3 * * * * /mnt/file.sh > /dev/null
# 重点是思路!
⑥ 监控磁盘剩余空间、NFS系统、mysql、web等
# 监控磁盘空间
df -h | awk 'NR==2{print $4}'
######################
#监控服务是不是进行-->不需要awk取出来!
netstat -antlupe |grep 3306|wc -l
#端口是不是存在或者socket是不是存在
#mysqld是不是开启-->两个
netstat -antlupe |grep mysqld |wc -l
# web是80
⑦ 端口监控
'本地'监控:'netstat'、'ss'、lsof
'远程'监控:telnet(一般不用)、nmap、'nc'
telnet监控端口
[root@lamp ~]# echo -e "\n"|telnet www.baidu.com 80|grep Connected|wc -l
Connection closed by foreign host.
1
nmap监控端口
[root@lamp ~]# nmap www.baidu.com -p 80|grep open|wc -l
1
nc监控端口
[root@lamp ~]# nc -z 192.168.163.128 22|grep succeeded|wc -l
1
⑧ 进程监控
1、'本地监控':ps -ef|grep mysql|wc -l
2、wget/curl,http方式根据'返回值'或者返回内容判断-->'服务状态判断'
3、header(http),http方式根据'状态码'判断
4、数据库特有通过'mysql客户端连接',根据返回值或者返回内容判断
[root@lamp ~]# cat check_db.sh
#!/bin/bash
#本地的方式-->mysql不启动,是0(数字),用 -eq会有语法报错!--->尽量取行判断,不要取数值
# 多分割符号
if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]
#过滤进程(注意:脚本名称不能是mysql,自己也算一个进程,容器出错)
#if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ]
#if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ]
#if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
#远程的方式-->换成自己的ip的形式!
#if [ `nmap 172.25.2.1 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
#if [ `nc -w 2 172.25.2.1 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ]
then
echo "Mysql is Running."
else
echo "Mysql is Stopped."
# 脚本开启-->多示例
/deta/mysql start
fi