Ping:结果显示 56(84),而不是预期的结果

Ping:结果显示 56(84),而不是预期的结果

我正在尝试修改脚本以显示丢失的数据包以及 ping 结果。我只包含不起作用的部分,因为脚本中的某些命令是公司特定的。

for myHost in $HOSTS; do
   PINGFULL=$(ping -f -c 1000 "$myHost")
   PINGLOSS=$(echo $PINGFULL | grep loss | cut -d ',' -f 3 | grep -Eo '[0-9]{1,4}')
   PINGVAL=$(echo $PINGFULL | head -n 5 | tail -1 | cut -d ' ' -f 4)
   echo "$PINGVAL"
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PINGVAL / $PINGLOSS" 
done

预期结果是

2015-05-06_19:00:21 / 192.168.20.102 / 0.157/0.329/0.410/0.023 / 0

我得到的是

2015-05-06_18:43:11 / 192.168.1.101 / 56(84) / 0

$PINGVAL 就是混乱的地方。

我尝试使用 head/tail 和 grep 来获取特定行,当我在 cli 中运行该行时,它可以工作并只显示第三组,但是当我在脚本中一起运行它时,会出现错误。

我想知道是否应该在脚本中将其放入第二个时间。

编辑:我想我应该添加,脚本以原始方式工作(没有丢包结果)。

原来的:

for myHost in $HOSTS; do
   PING=$(ping -f -c 1000 "$myHost" |grep 'rtt' | awk '{print $4}')
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PING" >> "$LOGFILE" 2>&1
  done

答案1

如果没有双引号$PINGFULL,它会将多行变成单行,因此您将得到第一行。

另外,rtt 统计信息位于最后一行,因此请去掉head -n 5.

for myHost in $HOSTS; do
   PINGFULL=$(ping -c 5 "$myHost")
   PINGLOSS=$(echo "$PINGFULL" | grep loss | cut -d ',' -f 3 | grep -Eo '[0-9]{1,4}')
   PINGVAL=$(echo "$PINGFULL" | tail -1 | cut -d ' ' -f 4)
   echo "$PINGVAL"
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PINGVAL / $PINGLOSS" 
done

相关内容