Shell脚本出现$相关语法错误 第5行for循环$DIR变量报错原因排查
Shell脚本报错原因梳理
核心报错原因
- 第4行DIR变量字段取值完全错误:
df -Ph的输出中第5列为磁盘使用率百分比值,你要遍历的磁盘挂载目录在第6列,取错字段后后续df -Ph $i传入的是百分比值而非有效路径,命令直接执行失败。 - 第4行DIR赋值语法错误:你在双引号内额外加了括号
(),会导致DIR变量的最终值首尾携带括号字符,for循环遍历$DIR时会把括号识别为路径的一部分,不存在对应路径直接触发报错。 - 空值未做兼容处理:如果前面
df执行失败,USED变量会是空值,后续数值比较运算符-gt遇到空值会直接报语法错误。
修正后可运行的参考代码
#!/bin/bash LIMIT='50' # 正确提取所有磁盘挂载点路径 DIR=$(df -Ph | column -t | awk 'NR>1 {print $6}') for i in $DIR; do USED=$(df -Ph "$i" | awk 'NR==2 {print $5}' | cut -d"%" -f1) # 先判断USED为有效数字再做比较,避免空值报错 if [[ "$USED" =~ ^[0-9]+$ && "$USED" -gt "$LIMIT" ]]; then # 此处填写超过阈值后的处理逻辑 echo "挂载点${i}使用率已超过${LIMIT}%,当前使用率为${USED}%" fi done
内容的提问来源于stack exchange,提问作者Shahrin
相关产品推荐
相关产品推荐

