Shell

ping:只顯示結果

  • June 24, 2019

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 命令失敗時我的管道可能無法正常工作。

另一種**awk**變化:

ping -qc1 google.com 2>&1 | awk -F'/' 'END{ print (/^rtt/? "OK "$5" ms":"FAIL") }'
  • -F'/'- 將斜杠/視為欄位分隔符

範例輸出:

OK 47.090 ms

你可以用它自己做的不多ping,但你可以在 AWK 中完成所有處理,減少管道、程序等的數量:

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

引用自:https://unix.stackexchange.com/questions/409203