Chinaunix

标题: 如何实现Ping的结果记录到不同的文件 [打印本页]

作者: david0    时间: 2016-05-03 10:16
标题: 如何实现Ping的结果记录到不同的文件
新手求助:
如何实现将Ping的结果记录到不同的文件中:如果能ping通,写入到一个文件;否则写入到另一个文件中。
1. IP地址列表保存在ip_list.txt文件,ip的格式有3列
   下面是ip_list.txt样例:
#设备区域        IP地址           主机名
设备A区                192.168.1.1 host1
设备A区                192.168.1.2 host2
设备B区                192.168.2.1 host3
设备C区                192.168.3.1 host4
文本文件的各列用tab键隔开;

2. 如果设备能ping通,写入到ping_ok.txt文件中,格式为:
   设备A区        192.168.1.1 host1
   设备C区        192.168.3.1 host4
   设备B区        192.168.2.1 host3

3. 如果设备不能ping通,写入到ping_fail.txt文件中,格式为:
   设备A区        192.168.1.2 host2

4. 针对每个IP执行ping操作的结果同时写入到ping_log.txt

   脚本学习中,非常感谢!
作者: 99超人    时间: 2016-05-03 10:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 过过招    时间: 2016-05-03 10:46
ping通则$?为0,对应stdout 1> ping_ok.txt,ping不同$?为1,对应stderr,2>ping_fail.txt。
作者: lll1985911    时间: 2016-05-03 10:53
#!/bin/sh

ip_list='ip_list.txt'
ping_ok='ping_ok.txt'
ping_fail='ping_fail.txt'
ping_log='ping_log.txt'
ping_max_count=4

grep -Ev '^#' ${ip_list} | while read -r device_area ip_addr hostname
do
        echo -n "${ip_addr}..."
        ping -c ${ping_max_count} ${ip_addr} 2>&1 >>${ping_log}
        ret_val=$?
        echo '[end]'
        if [ ${ret_val} -ne 0 ]
        then
                echo ${ip_addr} >> ${ping_fail}
                continue
        fi
        echo ${ip_addr} >> ${ping_ok}
done
作者: jason680    时间: 2016-05-03 11:14
回复 1# david0

$ awk '/^#/{next}{info=$0;print>"ping_log.txt";cmd="ping -t1 -c1 "$2;ping="fail"; while(cmd|getline){print > "ping_log.txt";if(/ 0% packet loss/)ping="ok"};print "--------------------------\n\n">"ping_log.txt";print info,ping;print info > "ping_"ping".txt"}' ip_list.txt
设备A区                192.168.1.1 host1 fail
设备A区                192.168.1.2 host2 fail
设备B区                192.168.2.1 host3 fail
设备C区                192.168.3.1 host4 fail

   
作者: david0    时间: 2016-05-03 16:25
论坛高手很多,程序简洁实用,多谢!
作者: jcdiy0601    时间: 2016-05-04 10:05
#!/bin/bash

while read line
do
  ip=`echo $line|awk '{print $2}'`
  ping $ip -c 4 > /dev/null

  if [ $? -eq 0 ]
  then
    echo $line >> ping_ok.txt
  else
    echo $line >> ping_fail.txt
  fi
done < ip_list.txt




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2