最可靠方式是用 df --output=pcent 提取纯数字使用率再比较;需遍历关键挂载点,兼顾 inode 和权限异常。

直接用 df 提取使用率数值,再用 [ ] 或 [[ ]] 做数字比较,是最常用、最可靠的方式。关键不是“能不能判断”,而是“怎么提取准确的数字”——避免被标题、单位或空格干扰。
提取纯数字使用率(核心步骤)
不能直接对 df -h 的输出做比较,因为那包含百分号、空格和表头。必须先过滤出目标分区的 Use% 列,并去掉 % 符号:
-
df / | awk 'NR==2 {print $5}' | sed 's/%//':取根分区第二行的第5列(Use%),删掉% -
df --output=pcent / | tail -1 | tr -d '[:space:]%':用--output输出结构化字段,更稳定(推荐,适用于较新系统) - 如果要检查多个挂载点,可用
df --output=source,pcent,target | tail -n +2配合while read循环处理
写进条件判断语句
拿到纯数字后,就能用标准 Shell 数值比较操作符了:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
if [ "$(df / | awk 'NR==2 {print $5}' | sed 's/%//')" -gt 80 ]; then echo "告警"; fi- 更健壮写法(防空值/非数字):
usage=$(df --output=pcent / 2>/dev/null | tail -1 | tr -d '[:space:]%')<br>if [ -n "$usage" ] && [ "$usage" -gt 80 ] 2>/dev/null; then ... fi
- 用
[[ ]]可省略引号和2>/dev/null,但需确保 shell 支持(如 bash):[[ $(df --output=pcent / | tail -1 | tr -d ' %') -gt 80 ]] && echo "超阈值"
注意挂载点与文件系统匹配
别只写 df / 就完事。生产环境常有独立挂载点(如 /var/log、/data),它们可能比根分区更早爆满:
- 查所有关键挂载点:
df --output=source,pcent,target | grep -E '/$|/var|/data|/backup' - 脚本中应遍历这些路径,分别提取并判断,而不是只盯一个
/ - 若用
df -P(POSIX 格式),可避免多行表头问题,适配老系统
避开常见陷阱
实际踩坑最多的是这三类:
-
误判已删除但未释放的文件:
df显示已满,du却统计不出对应大小。此时判断逻辑没错,但根源在 lsof + deleted,需额外检查 -
忽略 inode 耗尽:空间还有余量却报
No space left on device。得加df -i判断,例如df --output=ipcent,target | tail -1 | tr -d ' %' -
权限不足导致 df 报错:某些容器或受限环境里,普通用户执行
df可能失败。脚本开头应加df --version >/dev/null || exit 1做兼容性兜底










