Shell 脚本从命令输出中捕获值

Shell 脚本从命令输出中捕获值

从 shell 脚本中,我运行 ping 命令:

ping -c4 8.8.8.8
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=58 time=34.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=30.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=29.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=58 time=29.3 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 29.311/31.022/34.242/1.951 ms

我需要将数据包丢失(上例中的 0%)捕获到 shell 脚本中的一个变量中,以便进一步处理。有人能告诉我如何做到这一点吗?

答案1

您可以使用 grep 和 awk 从 ping 命令的输出中捕获数据包丢失。以下是示例:

ping_result=$(ping -c4 8.8.8.8)
packet_loss=$(echo "$ping_result" | grep -oP '\d+% packet loss')
echo "Packet Loss: $packet_loss"

在此示例中,您将结果存储在名为 ping_result 的变量中,以供进一步处理。

在 packet_loss 行中,您使用带有 Perl 参数的 grep 来提取所需的信息(%数据包丢失)。

最后,在最后一行输出变量。

希望能帮助到你!

答案2

类似的东西awk可以完成工作:

packet_lost=$(ping -c4 8.8.8.8|awk '/packet loss/ {print $6}')

答案3

如果你仅有的想知道全部数据包丢失(即主机不可访问),某些版本的ping 返回退出代码 1在这种情况下:

相关内容