shell(五)shell中的分支与循环结构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wzj_110/article/details/100167710

1    if

单分支结构

细节

if [ -f "$file" ];then

#####等价形式#####

if [ -f "$file" ]
then

2   双分支结构

3    多分支结构

注意:是elif而不是elseif,记住四个字母即可,并且后面也要跟then

练习1:等价变换

#!/bin/bash
# [ -f /etc/hosts ] && echo 1
if [ -f /etc/hosts ];then
        echo 1
fi

# 核心:思路的转换!

练习2:监控内存

#!/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" [email protected] #后续自己搭建邮件服务器!
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

特别强调:read读入和命令行传参是两种不同的方法!

需求1

用if双分支实现对nginx或mysql服务是否正常进行判断,使用进程数、端口、url的方式判断,如果进程没起,把进程启动。

web服务和数据库(mysql)的监控方法

需求:监控web服务和mysql的方式

1、端口监控

本地监控:netstat、sslsof

远程监控:telnet(一般不用)、nmap、nc

ss其它

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 

2、进程监控

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

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

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

5、数据库特有通过mysql客户端连接,根据返回值或者返回内容判断

注意:正常是几,如果不是几就要关注了!

查看远端的端口是否通畅3个简单实用案例

    [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 

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/100167710