注1:这是一个C型循环在这种情况下,哪个更容易使用变量,$4和$5,开始和结束C类网络定义为$1,$2,$3
注2:OS X的平命令中的工具:
-t 1 -c $COUNT $a$i
… 开关- t 1指定1秒之前的超时平退出,无论已收到多少数据包。对于其他系统'平实用程序的正确开关通常是-W。输出成功平如上所示将看起来像:
PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx): 56数据字节
来自xxx.xxx.xxx.xxx的64个字节:ICMP_SEQ = 0 TTL = 64次= 0.626毫秒
——xxx.xxx.xxx ping statistics——
发送2个包,接收1个包,丢包率为50.0%
min/avg/max/stddev = 0.626/0.626/0.626/0.000 ms
一个失败的平看起来像:
PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx): 56数据字节
——xxx.xxx.xxx ping statistics——
发送1个包,接收0个包,丢包100.0%
注3:的输出平是管道来grep和论点'已收到'告诉grep发送任何包含该参数文本的行stdout.的成功平注释1中的示例grep就是这一行:
发送2个包,接收1个包,丢包率为50.0%
一个失败的平会产生:
发送2个包,接收0个包,丢包100.0%
注4:的输出grep是由管道输送到awk实用程序。的-FSwitch指定划分数据项的分隔符,在这种情况下它指定了逗号和{print $2}参数指定awk应该输出第二个字段;因此,从grep的成功ping的输出awk将依次输出:
1包收到了
这也可以是2或3个包,取决于在设定的时间内收到了多少平的-T.开关。显然一个失败平会导致awk输出:
0数据包收到
的awk输出被发送到第二次调用awk默认为空格作为分隔符,并指示打印第一个字段,{print $1},要么为0平失败或1 2 3平成功了。
注5:的$在括号的前面平,grep,awk命令转换由ping-grep-awk-awk命令转换为可存储在变量中的值回复.
注6:如果变量回复不等于“0”(即收到的一个或多个数据包)然后打印,使用printf,成功状态更新(注意回车,r \).这个更新看起来像:
主持人:xxx.xxx.xxx.xxx将于2014年7月23日星期三16:50:09结束
注6b:然后调用…旋度并将命令发送到PingPlotter,以添加由变量$a$i组合指定的目标(变量的当前值被替换为占位符)。后旋度命令是:
& > / dev / null
,它通过标准输出(stdout)以及错误输出到位桶。如果你真的关心错误,那么你可以随意修改这个但是为了成功的调用旋度你还是会想摆脱stdout输出;它将是一个像这样的XML块:
<?xml version = " 1.0 " encoding = " iso - 8859 - 1 " ?> < PingPlotter / >
注7:如果变量回复= " 0 "然后打印一个失败更新:
主持人:xxx.xxx.xxx.xxx将于2014年7月23日星期三16:50:09结束
使用printf与一个r \附加一个回车,以便进一步平失败更新将覆盖该行。这个覆盖将一直发生,直到成功的更新覆盖该行,然后将打印移到下一行。注意前面的两个空格r \在注6a所述的成功更新中;这将覆盖失败消息的最后两个字符,这是由于“down”比“up”长。为什么要在文本输出上瞎忙活?因为更新会让你知道发生了什么,即使有一整个运行平失败了,还不如好看。
注8a & 8b:最后,当我们循环遍历所有IP地址空间时,我们打印62个空格来覆盖最后的状态消息printf输出空格有点复杂;“% 0。s”指定打印长度为零的字符串,如果提供的字符串长度大于零,则不包含额外字符。然后在这个零长度的字符串之后打印一个空格,有62个参数,所以printf打印每个带有空间的62个零长度字符串。决赛printf打印一个回车,文本“Done.”,最后在退出脚本之前使用换行符。再说一遍,漂亮就是漂亮。