如何转换 Bash 中 if 语句计数器请求的回显回复?

如何转换 Bash 中 if 语句计数器请求的回显回复?

我正在尝试在 if 语句中使用 ping 命令,从 get go 开始将发送一定数量的请求,例如;ping -c 6 hostname并认为这些数据包的声明成功if [ $result -gt 4]在一个有损链路例如,让它回来。

我或多或少已经弄清楚了,但只为每个命令发送单独的数据包(ping -c 1 hostname),这需要更长的时间并且不能很好地反映连接状态。我发现了一个真正有趣的地方,通过管道grepwc我可以将单词计算为整数,但它没有走那么远,不幸的是,它也只专注于单数据包测试。

写入文件是另一种方式,但我不想写入,即使它在下一个循环中被覆盖(这一切都将在循环中)并且永​​远不会真正增长。

我想做的是测试文件服务器是否可用;如果是安装它,如果不是则不要安装尽快卸载失去连接的共享,这样系统就不会挂起或可能打开隧道。我设法用 AppleScript 和automountd/来做到这一点autofs,但我会使用 Bash 脚本 bc [1.] 这是我唯一的脚本语言有点理解并[2.]以小数据包批次快速、连续地进行测试,这样在切换回网络时可以有一定的余地以快速连接,或避免在切换出网络时挂起系统。

即使有更好的方法,我仍然想学习如何grep从单个命令转换 ped 行以量化它们并在 if 语句中使用它们。

谢谢!

答案1

您想要测试是否至少收到了 6 个数据包中的 4 个,即是否存在严格小于 50% 的数据包丢失(6 个数据包中收到的 3 个数据包意味着 50% 的丢失)。

if ping -c 6 "$server" | awk -F, '/packet loss/ { exit !((0+$3) < 50) }'
then
    printf 'Server "%s" is alive and returning more than 50%% of packets\n' "$server"
else
    printf 'Server "%s" is in bad shape\n' "$server"
fi

该命令查看包含输出awk中文本的行。在该行的第三个逗号分隔字段中,有一个数字,即数据包丢失百分比,我们通过在算术上下文中解释该字段(通过向其添加零)来获得该数字。我们退出代码时,其状态反映了数据包丢失是否严格低于 50%(零 = 是,非零 = 否)。packet losspingawk

答案2

我会用来awk计算成功回复的数量。

if ping -c6 "$server" | awk '/bytes from/ { k++ } END { exit !(k>=4) }'
then
    echo OK
else
    echo Dubious
fi

每条匹配的行bytes from都会增加计数器k。仅当退出状态为成功(零)时k >= 4

相关内容