【Linux 运维】超简单 Shell 脚本实现内存监控与告警(附两种写法 )
目录一、需求背景为什么要做内存监控二、核心原理内存使用率的计算方式三、实验要求四、实验主要配置方法一分布实现新手首选if语句语法介绍方法二高效简洁(只需一行代码实现不用 if纯逻辑运算符五、总结一、需求背景为什么要做内存监控在 Linux 服务器运维中内存资源耗尽会直接导致服务宕机因此实时监控内存使用率并在阈值触发告警是运维的核心需求之一。本文基于题目要求内存使用率50% 告警50% 提示安全通过两种不同的 Shell 脚本实现方案从基础命令到高效语法带你吃透内存监控脚本的编写思路与优化技巧。二、核心原理内存使用率的计算方式free命令是获取内存信息的核心工具其输出中关键字段含义如下字段含义total系统总内存单位 KBused已使用内存含缓存 / 缓冲现代 Linux 已优化接近实际使用量Mem内存大小内存使用率计算公式使用率total内存used内存×100%三、实验要求自动获取系统的总内存和已使用内存计算内存使用率百分比当使用率 **50%** 时输出告警信息当使用率 **50%** 时输出安全提示四、实验主要配置这里我用两种简单且好理解的方法为大家展示方法一分布实现新手首选这种方法会把每一步都拆开适合刚接触shell脚本的学者核心使用了 Shell 的if条件判断语句对有其他语言基础的读者而言学习门槛较低。。if语句语法介绍单分支结构### 单分支结构 shell # 语法1 if [条件表达式]; then 指令 fi #条件语句结束 双分支结构if [条件表达式]; then 指令序列1 else 指令序列2 fi多分支结构if 条件表达式1 then 指令序列1 elif 条件表达式2 then 指令序列2 else 指令序列n fi新手易踩坑Shell 脚本的if语句细节规范很多初学者在编写 Shell 脚本时常会遇到 “代码逻辑正确但运行报错” 的情况这类问题大多源于容易被忽略的语法细节。编写时需格外注意以下两点条件判断中[]前后必须保留空格否则会触发语法错误if语句必须以fi作为结束标记不可省略。完整代码如下# 1. 获取已使用内存单位KB used_mem$(free | grep Mem | tr -s | cut -d -f3) # 2. 获取系统总内存单位KB total_mem$(free | grep Mem | tr -s | cut -d -f2) # 3. 计算内存使用率整数除法结果取整 percent$(( used_mem * 100 / total_mem )) # 4. 输出当前使用率 echo 当前内存使用为${percent}% # 5. 阈值判断与告警 if [ $percent -gt 50 ]; then echo 内存使用超过50%请注意 else echo 内存使用低于50%状态安全 fi逐行拆解讲解free命令用来查看系统内存使用情况输出包含total总内存、used已使用、free空闲等字段。grep Mem过滤出 “内存Mem” 相关的行排除掉 Swap 交换分区的信息避免干扰计算。tr -s 把多个连续的空格压缩成单个空格解决free命令输出列分隔不均的问题方便后续用cut提取数据。cut -d -f3以空格为分隔符提取第 3 列数据也就是used已使用内存值同理-f2提取第 2 列的total总内存值。$(( ... ))Shell 的整数运算语法实现已用内存*100/总内存的百分比计算结果会自动取整。if [ $percent -gt 50 ]用-gtgreater than大于判断使用率是否超过 50%并输出对应的提示信息。运行结果小提示在执行脚本前需先创建以.sh为后缀的文本文件将 Shell 代码写入其中再通过sh命令运行脚本。方法二高效简洁(只需一行代码实现不用 if纯逻辑运算符因在前面我们要准备的查找代码都写过了这里就不过多介绍直接给出判断核心代码[[ $percent -gt 50 ]] echo 内存告警 || echo 内存安全结果展示五、总结本次内存监控脚本开发案例依托 Linux 最基础的文本处理命令完成数据采集搭配 Shell 原生运算与判断语法实现业务逻辑未引入 awk 等进阶命令极大降低了入门学习难度。通过本案例学习读者可熟练掌握 free 内存查看指令、管道组合命令、Shell 整数运算以及两种主流条件判断写法夯实 Shell 脚本编写基础。该脚本实用性极强既能够满足课程实验、课后练习需求也可应用于中小型服务器简易资源巡检工作是从 Linux 入门迈向运维实战的优质练手项目。