免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2002 | 回复: 6
打印 上一主题 下一主题

[系统管理] 如何实现Ping的结果记录到不同的文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-03 10:16 |只看该作者 |倒序浏览
新手求助:
如何实现将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

   脚本学习中,非常感谢!

求职 : 技术支持/维
论坛徽章:
0
2 [报告]
发表于 2016-05-03 10:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-23 06:20:0015-16赛季CBA联赛之八一
日期:2017-10-26 17:58:2515-16赛季CBA联赛之北控
日期:2017-11-02 10:50:56
3 [报告]
发表于 2016-05-03 10:46 |只看该作者
ping通则$?为0,对应stdout 1> ping_ok.txt,ping不同$?为1,对应stderr,2>ping_fail.txt。

论坛徽章:
0
4 [报告]
发表于 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

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 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

   

论坛徽章:
0
6 [报告]
发表于 2016-05-03 16:25 |只看该作者
论坛高手很多,程序简洁实用,多谢!

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
7 [报告]
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP