Shell中判断数字大小需用if搭配整数比较运算符(如-gt、-lt),配合命令替换获取实时数值,示例脚本通过top和awk提取CPU使用率并对比阈值触发警告。

Shell流程控制中判断数字大小,核心是用 if 搭配整数比较运算符(如 -gt、-lt),配合命令替换获取实时数值,就能精准监控CPU是否超阈值。
用整数比较运算符做判断
Shell内置的 [ ] 测试命令支持整数比较,不能直接用 > 或 符号(那是重定向或字符串比较)。常用运算符有:
-
-eq:等于 -
-ne:不等于 -
-gt:大于 -
-lt:小于 -
-ge:大于等于 -
-le:小于等于
例如:if [ $cpu_usage -gt 80 ]; then echo "告警"; fi —— 注意变量前后必须有空格,且 ] 前也要留空格。
获取并处理CPU使用率数值
CPU使用率常为浮点数(如 78.3),而整数比较要求整型。常见处理方式:
- 截断小数:
cpu_usage=${cpu_usage%.*}(去掉小数点后所有内容) - 四舍五入:
cpu_usage=$(printf "%.0f" $cpu_usage) - 用
bc做浮点比较:if (( $(echo "$cpu_usage > 80" | bc -l) )); then ...
推荐优先截断或四舍五入再用 -gt,更轻量;若需精确到小数点后一位比较,再选 bc。
构建完整监控逻辑
一个典型CPU监控片段包括采集、判断、响应三步,需注意结构闭合和可读性:
- 用
top -bn1非交互模式取单次快照,再grep "Cpu(s)" | awk '{print $2 + $4}'得出用户态+系统态总使用率 - 每个
if必须以fi结尾;如带else或elif,也要对应写全 - 建议把阈值设为变量(如
threshold=80),方便统一调整 - 加入日志记录或告警动作,比如
echo "$(date): CPU ${cpu_usage}% > ${threshold}%" >> alert.log
实际脚本片段示例
以下是一个最小可行监控循环:
#!/bin/bashthreshold=80
while true; do
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' | awk '{printf "%.0f"}')
if [ $cpu_usage -gt $threshold ]; then
echo "$(date): CPU高负载警告 —— ${cpu_usage}%" | logger -t cpu-monitor
fi
sleep 10
done

















