免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: huarte
打印 上一主题 下一主题

[文本处理] 批量ping并输出结果 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
11 [报告]
发表于 2013-03-19 14:23 |只看该作者
我就说嘛,我这里ping一个不存在的IP,比如172.1.1.1,结果确实是少于5行,但是ping同子网的不在线的IP或者不存在的IP,结果跟ping通的行数是一样的。

论坛徽章:
0
12 [报告]
发表于 2013-03-19 14:26 |只看该作者
楼主 为何 不用 $? 来判断 是否ping成功

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
13 [报告]
发表于 2013-03-19 14:28 |只看该作者
@allen08pm
好方法,楼主可以考虑采用~

论坛徽章:
0
14 [报告]
发表于 2013-03-19 15:00 |只看该作者
回复 12# allen08pm
  1. #!/bin/sh
  2. for  ip in `cat wg_fir_iplists`
  3. do
  4.         ping -c 2  $ip > /dev/null;
  5.         if [ $? -eq 0 ];then
  6.         echo "$ip PASS";
  7.         else
  8.         echo "$ip LOSS";
  9.         fi
  10. done
复制代码
果然好用,哈哈

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
15 [报告]
发表于 2013-03-19 15:30 |只看该作者
回复 14# huarte
  1. #!/bin/sh
  2. for  ip in `cat wg_fir_iplists`; do
  3.     ping -c 2  $ip > /dev/null && echo "$ip PASS" || echo "$ip LOSS"
  4. done
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
16 [报告]
发表于 2013-03-19 15:46 |只看该作者
回复 1# huarte


    批量ping 试试 fping
  1. fping -a -f wg_fir_iplists
复制代码

论坛徽章:
1
金牛座
日期:2013-09-14 18:12:00
17 [报告]
发表于 2013-03-19 16:56 |只看该作者
学习了回复 12# allen08pm


   

论坛徽章:
0
18 [报告]
发表于 2013-03-19 17:20 |只看该作者
本帖最后由 liminshiwo 于 2013-03-19 17:22 编辑

根据楼主的代码改的
  1. #!/bin/sh
  2. for  ip in `cat wg_fir_iplists`
  3. do
  4.         count=`ping -c 2  $ip|wc -l`
  5.        if [ $count > 5 ]
  6.         then
  7.            echo "$ip PASS";
  8.         else
  9.            echo "$ip LOSS";
  10.        fi

  11. done
复制代码
不过用12楼的命令执行成功的标识是最好的

论坛徽章:
0
19 [报告]
发表于 2013-03-19 17:38 |只看该作者
本帖最后由 abcfy2 于 2013-03-19 17:42 编辑

直接用if命令来判定ping的exit code,能ping通的话返回的exit code是0,否则是别的。
  1. ip=8.8.8.8
  2. if ping -c 2 $ip
  3.    then
  4.           echo the ip $ip can be reached.
  5. else
  6.     echo the ip $ip cannot be reached
  7. fi
复制代码
shell中的if和高级语言中的if不太一样,if是判定后面跟着的执行命令是否正常退出了,也就是正常执行,中间没有返回错误,then执行正确结果,else执行错误结果。

论坛徽章:
0
20 [报告]
发表于 2013-03-19 17:44 |只看该作者
顶15楼的脚本,简洁明了,省了if判定的过程了,直接用&&语句和||来执行分支结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP