ping:仅显示结果

ping:仅显示结果

是否可以仅显示 ping 时的毫秒数而不是整个结果页面?

我想检查我的服务器是否在线,所以我想返回“OK xyz ms”或“FAIL”。我目前正在这样做:

#!/bin/sh
ergebnis=$(ping -qc1 google.com) 
ok=$?
avg=$(echo -e "$ergebnis"  | tail -n1 | awk '{print $4}' | cut -f 2 -d "/")

if [ $ok -eq 0 ]
then
        echo "OK $avg ms"
else
        echo "FAIL"
fi

然而,这使用了相当多的管道,并且由于我经常运行这个命令来监视我的服务器,我想知道是否有一种“更智能”的方法。我还担心当 ping 命令失败时我的管道可能无法正常工作。

答案1

其他awk变化:

ping -qc1 google.com 2>&1 | awk -F'/' 'END{ print (/^rtt/? "OK "$5" ms":"FAIL") }'
  • -F'/'- 将斜线/视为字段分隔符

输出示例:

OK 47.090 ms

答案2

您对其本身无能为力ping,但您可以在 AWK 中完成所有处理,减少管道、进程等的数量:

ping -qc1 google.com 2>&1 | awk -F/ '/^rtt/ { printf "OK %.2f ms\n", $5; ok = 1 } END { if (!ok) print "FAIL" }'

答案3

如果您不太关心确切的错误消息,那么怎么样

ping  google.com | grep -Po "time.*"

答案4

如果你只是想要地位(并不是毫秒等),你就可以if了。这适用于我的用例:

if ping -q -c 1 192.168.8.8 2>&1 > /dev/null ; then
    echo "Ok"
else
    echo "Fail"
fi

相关内容