20260414
#!/bin/bash
# 检测 IP 列表文件中的主机是否可 Ping 通,结果同时输出到屏幕和日志文件
# 用法: ./ping_check.sh <ip_list_file> [output_log_file]
# 默认输出文件名(带时间戳)
DEFAULT_LOG_FILE="ping_result_$(date +%Y%m%d_%H%M%S).log"
# 检查参数
if [ $# -lt 1 ]; then
echo "用法: $0 <ip_list_file> [output_log_file]"
echo "示例: $0 ip_list.txt # 自动生成日志文件"
echo " $0 ip_list.txt result.log # 指定日志文件"
exit 1
fi
IP_FILE="$1"
LOG_FILE="${2:-$DEFAULT_LOG_FILE}"
# 检查 IP 列表文件是否存在
if [ ! -f "$IP_FILE" ]; then
echo "错误: 文件 '$IP_FILE' 不存在"
exit 1
fi
# 检查 ping 命令
if ! command -v ping &> /dev/null; then
echo "错误: 未找到 ping 命令,请先安装。"
exit 1
fi
# 清空(或创建)日志文件,并写入开始时间
echo "检测开始时间: $(date '+%Y-%m-%d %H:%M:%S')" | tee "$LOG_FILE"
echo "IP 列表文件: $IP_FILE" | tee -a "$LOG_FILE"
echo "----------------------------------------" | tee -a "$LOG_FILE"
TOTAL=0
REACHABLE=0
UNREACHABLE=0
# 逐行读取 IP 地址
while IFS= read -r ip || [ -n "$ip" ]; do
# 跳过空行和注释行
[[ -z "$ip" || "$ip" =~ ^# ]] && continue
TOTAL=$((TOTAL + 1))
# 发送一个 ping 包,超时 1 秒
if ping -c 1 -W 1 "$ip" &> /dev/null; then
echo "可达 : $ip" | tee -a "$LOG_FILE"
REACHABLE=$((REACHABLE + 1))
else
echo "不可达 : $ip" | tee -a "$LOG_FILE"
UNREACHABLE=$((UNREACHABLE + 1))
fi
done < "$IP_FILE"
echo "----------------------------------------" | tee -a "$LOG_FILE"
echo "检测完成: 总计 $TOTAL, 可达 $REACHABLE, 不可达 $UNREACHABLE" | tee -a "$LOG_FILE"
echo "日志已保存至: $LOG_FILE"
使用方法
保存脚本为 ping_check.sh,执行 chmod +x ping_check.sh。
准备 IP 列表文件 ip_list.txt,每行一个 IP(支持空行和 # 注释)。
运行:
./ping_check.sh ip_list.txt → 自动生成带时间戳的日志文件。
./ping_check.sh ip_list.txt result.log → 使用指定文件名 result.log。
文档更新时间: 2026-04-14 09:20 作者:月影鹏鹏