在 Bash 脚本中,可以通过 free
命令获取内存利用率,然后结合 awk
和条件判断语句实现监控内存利用率是否高于 60%。以下是一个示例脚本:
1. 示例脚本
bash
#!/bin/bash
# 获取总内存和已使用内存
total_mem=$(free | awk '/Mem:/ {print $2}')
used_mem=$(free | awk '/Mem:/ {print $3}')
# 计算内存使用率
mem_usage=$(awk "BEGIN {print ($used_mem / $total_mem) * 100}")
# 判断内存使用率是否超过 60%
if (( $(echo "$mem_usage > 60" | bc -l) )); then
echo "内存利用率高于 60%: 当前使用率为 ${mem_usage}%"
else
echo "内存利用率低于或等于 60%: 当前使用率为 ${mem_usage}%"
fi
2. 简洁版本
bash
#!/bin/bash
# 获取内存使用率
mem_usage=$(free | awk '/Mem:/ {print $3/$2 * 100}')
# 判断是否高于 60%
if (( $(echo "$mem_usage > 60" | bc -l) )); then
echo "内存利用率高: ${mem_usage}%"
else
echo "内存利用率正常: ${mem_usage}%"
fi
2.1. 说明
free | awk '/Mem:/ {print $3/$2 * 100}'
:直接计算使用率百分比。bc
:处理浮点数比较。
3. 如果内存利用率高于60%那就等待,否则10s,在判断,否则跳出while循环
以下是实现该逻辑的 Bash 脚本:
bash
#!/bin/bash
while true; do
# 获取内存使用率
mem_usage=$(free | awk '/Mem:/ {print $3/$2 * 100}')
# 判断内存使用率
if (( $(echo "$mem_usage > 60" | bc -l) )); then
echo "内存利用率高: ${mem_usage}%,继续等待..."
sleep 10
else
echo "内存利用率正常: ${mem_usage}%,退出循环。"
break
fi
done
3.1. 说明
- 内存检查:每次计算内存使用率。
- 高于 60%:等待 10 秒,然后重新检查。
- 低于等于 60%:退出循环。
sleep 10
:延迟 10 秒,避免高频运行占用资源。
4. 不需要中间输出
bash
#!/bin/bash
while (( $(echo "$(free | awk '/Mem:/ {print $3/$2 * 100}') > 60" | bc -l) )); do
sleep 10
done
4.1. 说明
- 内存判断 :直接在
while
循环中完成,利用awk
计算内存使用率。 - 退出条件:内存使用率低于或等于 60% 时自动退出循环。
- 无输出:脚本不打印任何信息,完全静默运行。
4.2. 关键点
awk
计算内存使用率返回浮点数。- 使用
bc -l
进行浮点数比较,避免直接用(( ))
导致语法错误。