shell脚本——实现延时大于10ms打印输出

1,277 阅读1分钟

一、代码展示

#!/bin/bash
ip=$*
echo $ip
num=`ping -c 3 ${ip}|grep icmp_seq|awk '{print $7}'|cut -d= -f2`
for snum in $num
do
 if [ `echo "${snum}>10"|bc` -eq 1 ];
 then
  echo "延时大于10ms,现在为${snum}";
 fi
done

二、代码解析

变量赋值

#$* 是以一个单字符串显示所有向脚本传递的参数,把参数值赋给变量ip
ip=$*

核心代码

num=`ping -c 10 ${ip}|grep icmp_seq|awk '{print $7}'|cut -d= -f2`
#ping命令执行3次
ping  -c 3 ${ip}

此时结果:
PING www.a.shifen.com (110.242.68.4): 56 data bytes
64 bytes from 110.242.68.4: icmp_seq=0 ttl=49 time=12.490 ms
64 bytes from 110.242.68.4: icmp_seq=1 ttl=49 time=12.712 ms
64 bytes from 110.242.68.4: icmp_seq=2 ttl=49 time=13.172 ms

--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 12.490/12.791/13.172/0.284 ms
#管道命令搜索包含icmp_seq的行
grep icmp_seq

执行ping -c 3 www.baidu.com | grep icmp_seq结果:
64 bytes from 110.242.68.4: icmp_seq=0 ttl=49 time=28.042 ms
64 bytes from 110.242.68.4: icmp_seq=1 ttl=49 time=12.626 ms
64 bytes from 110.242.68.4: icmp_seq=2 ttl=49 time=12.468 ms
#一行一行的读取指定的文件, 以空格作为分隔符,打印第7个字段
awk '{print $7}'

执行ping -c 3 www.baidu.com | grep icmp_seq | awk '{print $7}'结果:
time=13.738
time=13.246
time=13.370

#等号分割的两端字符串,选后一部分
cut -d '=' -f 2

执行:ping -c 3 www.baidu.com | grep icmp_seq | awk '{print $7}' | cut -d '=' -f 220.684
20.841
17.836

循环遍历

for snum in $num
do
#-eq 1用来判断echo命令的输出是否为1,为1则说明为true
 if [ `echo "${snum}>10"|bc` -eq 1 ];
then
  echo "延时大于10ms,现在为${snum}";
 fi
done

三、实现效果