请求修正Ping状态变更记录Bash脚本:仅上报状态变化
修正后的Cisco设备Ping状态监控脚本
原脚本的核心问题是没持续跟踪设备的上一次状态,还重复执行Ping操作,导致状态没变化时仍持续输出相同信息。以下是修复后的方案:
核心修复逻辑
- 用变量
last_status记录上一次的设备状态,初始值设为unknown(和正常状态区分开) - 每次循环只执行1次Ping,避免冗余操作和状态判断不一致
- 只有当前状态和上一次状态不同时,才输出带纽约时区的时间戳并更新状态记录
修复后的脚本
#!/bin/bash # 检查是否传入目标IP if [ $# -ne 1 ]; then echo "用法: $0 <目标IP>" exit 1 fi TARGET=$1 # 初始化上一次状态为未知 last_status="unknown" while true; do # 执行一次Ping,判断可达性 if ping -c 1 "$TARGET" &> /dev/null; then current_status="up" else current_status="down" fi # 仅当状态变化时输出日志 if [ "$current_status" != "$last_status" ]; then echo "Target is $current_status at: $(TZ='America/New_York' date)" last_status="$current_status" fi sleep 5 done
关键说明
- 增加了参数检查,确保运行脚本时传入目标IP(比如测试时用
./script.sh 10.1.1.51) - 每次循环只执行一次Ping,减少网络开销和状态冲突
- 通过对比
current_status和last_status,仅在状态切换时记录日志,避免重复上报
内容的提问来源于stack exchange,提问作者bluedepth
相关产品推荐
相关产品推荐

