如何修改Linux的ping-reboot脚本:丢包超50%时才重启
修改Ping脚本实现丢包率超50%时重启
完全可以通过grep结合正则表达式提取丢包率,再做阈值判断来实现需求。以下是修改后的脚本:
# 执行20次ping并捕获输出,屏蔽错误信息 ping_result=$(ping -c20 "host" 2>/dev/null) # 从输出中提取丢包率数值,提取失败时默认设为100(比如主机解析失败) packet_loss=$(echo "$ping_result" | grep -oP '\d+(?=% packet loss)' || echo 100) # 判断丢包率是否超过50% if [ "$packet_loss" -gt 50 ]; then echo "当前丢包率${packet_loss}%,超过阈值,执行重启操作" reboot else echo "网络状态正常,丢包率${packet_loss}%" fi
关键步骤说明:
ping -c20 "host" 2>/dev/null:执行20次ping测试,同时将错误输出(如主机不存在的报错)定向到/dev/null,避免干扰丢包率提取。grep -oP '\d+(?=% packet loss)':使用Perl兼容正则表达式,精准匹配并提取丢包率的数字部分(比如从20 packets transmitted, 8 received, 60% packet loss中提取60)。- 额外处理:如果ping命令执行失败(比如无法解析目标主机),默认丢包率设为100%,确保极端场景下也能触发重启逻辑。
内容的提问来源于stack exchange,提问作者December EveryDay
相关产品推荐
相关产品推荐

