Bash脚本异常:网卡未满足条件时未输出ping fail
问题解决:网卡未满足条件时无"ping fail"输出的修复
你的脚本核心问题是只处理了双条件满足的场景,当eth1未配置IP或链路断开时,脚本直接跳过整个if块,没有任何输出。要实现「双条件都满足才执行ping,否则输出ping fail」的需求,必须补充else分支覆盖所有不满足条件的情况。
修改后的完整脚本
#!/bin/bash # 提取eth1的IP地址(推荐用ip命令,兼容性更好) IP=$(ip addr show eth1 | grep -oP '(?<=inet\s)\d+(\.\d+){3}') # 如果你坚持用ifconfig,替换成下面这行: # IP=$(ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1) # 静默检查链路状态,仅返回判断结果不输出冗余内容 if /usr/sbin/ethtool eth1 | grep -q "Link detected: yes"; then link_ok=1 else link_ok=0 fi # 双条件判断:IP存在且链路正常 if [[ -n "$IP" && $link_ok -eq 1 ]]; then # 执行ping检测 if fping -I eth1 -r1 1.1.1.1 | grep -q alive; then echo "Interface up ping ok" else echo "ping fail" fi else # 任一条件不满足时直接输出ping fail echo "ping fail" fi
关键改动说明
- 新增else分支:明确覆盖「未配置IP」或「链路未检测到」的所有场景,确保无论哪种不满足条件的情况都能输出"ping fail"
- 静默状态检查:用
grep -q替代普通grep,让ethtool的链路检查只返回退出状态,不会把"Link detected: yes/no"这类冗余信息打印到终端 - 优化条件判断语法:用Bash原生的
[[ ... ]]替代test,支持更直观的逻辑表达式,兼容性和可读性更好 - IP提取优化:推荐用
ip addr show命令替代ifconfig,因为ifconfig在很多现代Linux发行版中已不再默认预装,ip工具的兼容性更强
内容的提问来源于stack exchange,提问作者Lurch
相关产品推荐
相关产品推荐

