You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本处理日志:去除ipHostNumber前缀提取IP存入数组并ping检测

可行实现方案

你原来的代码主要问题是没有做前缀摘除的逻辑,且循环内的数组赋值逻辑错误,以下是可直接运行的实现:

完整代码(优先推荐,用bash内置功能,无外部依赖)

#!/bin/bash
# 替换为你的实际日志文件路径
destlog="/your/log/path.log"

# 读取日志所有行到数组
readarray -t origin_lines < "$destlog"

# 若你需要去掉日志第一行,取消注释下一行
# unset origin_lines[0]

# 初始化纯IP数组
ip_list=()
for line in "${origin_lines[@]}"; do
    # 摘除每行开头的ipHostNumber: 前缀
    current_ip="${line#ipHostNumber: }"
    # 过滤空行避免无效ping
    [[ -n "$current_ip" ]] && ip_list+=("$current_ip")
done

# 遍历IP执行ping操作,-c 2表示只发2个包,可自行调整
for ip in "${ip_list[@]}"; do
    echo "Ping $ip 中:"
    ping -c 2 "$ip"
    if [ $? -ne 0 ]; then
        echo "*$ip  ping失败*"
    fi
    echo "====================="
done

简洁版实现(调用sed预处理,代码更短)

#!/bin/bash
destlog="/your/log/path.log"
# 直接读取处理好的IP到数组,同时过滤空行
readarray -t ip_list < <(sed 's/^ipHostNumber: //' "$destlog" | grep -v '^$')

# 后续ping逻辑和上面一致
for ip in "${ip_list[@]}"; do
    ping -c 2 "$ip"
done

关键逻辑说明

  • ${line#ipHostNumber: } 是bash内置的前缀删除语法,不需要调用外部工具,执行效率更高
  • 增加了空行过滤逻辑,避免日志中的空行或者格式异常行导致ping报错
  • ping命令增加了-c参数指定发包数量,避免持续ping不停止

内容的提问来源于stack exchange,提问作者blazzeq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:36:01