shell系统检查脚本的核心是准确判断数值、字符串、文件状态等条件:整数用 -gt/-lt 等运算符;字符串和空值需加引号并用 -z/==;文件测试用 -f/-r/-d;逻辑组合优先用 [[ ]] 配 && ||,避免语法错误。

Shell脚本中做系统检查,核心就是把数值、字符串、文件状态这些“事实”变成可判断的条件,并用逻辑组合起来。关键不在写得多,而在写得准——空格、引号、语法格式稍错一点,整个判断就失效。
整数比较:监控资源水位的硬指标
CPU、内存、磁盘使用率都是整数百分比,直接用 -gt、-lt、-le 等判断最稳妥:
-
[ $mem_used -gt 85 ]判断内存使用超阈值(注意是整数,free输出需提取数值) -
[ $(df -P / | awk 'NR==2 {print $5}' | sed 's/%//') -ge 90 ]提取根分区使用率并判断是否 ≥90% - 避免用
>或:它们在 <code>[ ]中会被 shell 当作重定向,必须用-gt等专用符号
字符串与空值判断:校验配置与输入是否可靠
服务名、路径、用户名这些变量一旦为空或不匹配,后续操作极易失败:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 用 -z 检查变量是否为空:
[ -z "$SERVICE" ] && echo "服务名未设置" && exit 1 - 用 = 或 == 做精确匹配:
[[ "$STATUS" == "running" ]] || systemctl start nginx - 变量务必加双引号:
[ "$USER" = "root" ],否则遇到空值会变成[ = root ],语法错误
文件测试:确认系统组件就位
备份脚本要读配置,日志清理要看文件大小,权限检查得确认可执行——都靠文件测试运算符:
-
[ -f "/etc/nginx/nginx.conf" ]确认主配置文件存在且是普通文件 -
[ -r "$LOGFILE" -a -s "$LOGFILE" ]同时检查日志文件可读且非空(-a是逻辑与,也可用&&) -
[ -d "/var/log/myapp" ] || mkdir -p /var/log/myapp目录不存在就创建
逻辑组合:让多个条件协同工作
真实检查往往不是单点判断,而是“既要…又要…”或“满足其一就处理”:
- 增强型
[[ ]]支持原生&&和||:[[ -f "$CONF" && -r "$CONF" ]] || { echo "配置不可用"; exit 2; } - 传统
[ ]中可用-a(与)、-o(或),但易出错,推荐统一用[[ ]] - 注意优先级:括号不能省,
[[ $a -eq 1 && $b -gt 10 ]] || [[ $c == "test" ]]这类结构要靠空格和分组清晰表达意图
系统检查脚本不需要炫技,重点是稳和准。每次写完条件,用 echo 打印变量值、用 echo $? 查退出码,比反复试错快得多。










