Linux:通过shell批量ping网站、ip延迟

来源:互联网 发布:我本知这世界 编辑:程序博客网 时间:2024/04/27 06:30

也许大家在使用Linux系统的时候也会遇到需要使用ping命令批量检查一批ip地址或网址的时候。博主我就在学习Linux系统的时候遇到这这样的问题——找谷歌速度比较快的IP地址。在查阅了一些资料后终于搞定了如何批量ping的方法,所以今天就和大家分享一下在Linux环境下通过简单几行shell来批量ping IP地址。

代码

先不啰嗦直接上代码和用法

#!/bin/bashpingfile=ip.txtrm -rf info.txtfor i in `cat $pingfile`do    echo "`curl ip.cn?ip=$i` `ping $i -c 4 | grep avg | gawk -F / '{print $5}'`" >> info.txtdone
  1. 使用时将代码保存至ping.sh
  2. 将IP地址按照每行一条的格式保存在ip.txt文件中并和ping.sh放在同一个文件夹中。
  3. 通过命令符(或给予ping.sh运行权限)输入sh ping.sh运行脚本
  4. 等待程序运行完毕后在在文件夹中寻找info.txt查看结果。

分析一下代码

对于想要知道这几行代码干了什么的同学咱们一起分析一下代码,欢迎朋友们留言交流。

#!/bin/bash

如果我们以可执行文件的方式执行我们的脚本,那么这行内容就告诉了系统使用bash终端来运行脚本

pingfile=ip.txt

为ip.txt指定变量名称,方便后面调用

rm -rf info.txt

为了避免之前运行过脚本,文件夹中已经有了info.txt这个文件,我们先执行一遍rm命令删除文件
  参数r表示递归删除目录和目录中的内容,虽然删除的是文件不过这样保险一点。
  参数f表示忽略不存在的文件和参数,并且不作提示。

for i in `cat $pingfile`do    ##这里的内容先省略##done

for do done组成的这部分是一个for循环体,cat命令将 ip.txt( pingfile=ip.txt)文件中的内容取出来,每次循环for循环都会从中取出一行内容给i,每次循环时i等等于一条不同的ip地址。

echo "`curl ip.cn?ip=$i` `ping $i -c 4 | grep avg | gawk -F / '{print $5}'`" >> info.txt

接下来我们看看每次循环时做了那些事情。
echo 这个命令负责把它后面执行的一行结果显示出来。
>>则把 echo 显示的每行内容输入添加到 info.txt 文件的最后一行。
curl命令会访问后面的网址ip.cn?ip=$i获取到IP($i)的地理信息。结果类似于:

IP:8.8.8.8 来自:Google DNS 

ping命令会查询ip是否可以访问已经访问的延迟时间,我们加了一个参数 -c 4表示每个地址测试4次并统计延迟。
|会把 ping 命令执行的结果信息输入给后面的命令作为输入信息使用。

# ping输出的内容类似下面这样PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=252 time=213 ms64 bytes from 8.8.8.8: icmp_seq=2 ttl=252 time=195 ms64 bytes from 8.8.8.8: icmp_seq=3 ttl=252 time=189 ms64 bytes from 8.8.8.8: icmp_seq=4 ttl=252 time=194 ms--- 8.8.8.8 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3004msrtt min/avg/max/mdev = 189.851/198.460/213.928/9.190 ms

grep avg会接收 ping 的结果作为它的输入内容,并从中找到有关键字avg的一行内容作为输出类似下面的内容,并传递给gawk

rtt min/avg/max/mdev = 189.851/198.460/213.928/9.190 ms

gawk命令简单说可以将一行文本内容拆分成几段数据并且根据我们的需要排列和显示。我们这里使用-F /参数指定以斜杠为分隔符,然后为我们输出第五段内容'{print $5}'也就是上例中ping的平均值198.460

结合前面curl命令执行后的内容我们可以知道echo命令将要输出的内容是

IP:8.8.8.8 来自:Google DNS 180.026

参考内容

在我得到这个方法的时候受到了以下博文的帮助:
使用Linux批量Ping獲取延時信息
shell 编写脚本批量ping ip

原创粉丝点击