Grep

過濾 ping 命令的輸出

  • July 22, 2019

我有一個相當簡單的小腳本。基本上,它在給定的域上執行 ping。它是這樣的:

ping -c2 $1 | head -n4 

它列印出例如:

PING google.com (172.217.17.206): 56 data bytes
64 bytes from 172.217.17.206: icmp_seq=0 ttl=55 time=2.474 ms
64 bytes from 172.217.17.206: icmp_seq=1 ttl=55 time=2.668 ms

這對我來說沒問題。

但是例如,就像您知道的那樣,有時 ping 命令不會從 ICMP 請求返回任何響應。例如:

ping intel.com
PING intel.com (13.91.95.74): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
--- intel.com ping statistics ---

發生這種情況時,腳本會停留幾秒鐘,然後繼續執行。我正在想辦法在這種情況下跳過它然後繼續往下走。我實際上根本不確定這是否可能。起初我想將它通過管道傳遞給 grep 以獲取“請求超時”,或者將結果放入變數中,然後 cat | grep 變數。

有人能想出一個辦法嗎?當請求超時時是否可以跳過執行?

如果您不希望它在伺服器無法響應時卡住“幾秒鐘”,請使用該-W選項添加超時。例如:

ping -c2 -W2 "$1"

-W2設置兩秒時間。更改限制以滿足您的需求。

在旁邊

在引用 shell 變數時,例如$1,總是將它們放在雙引號中,例如"$1",除非您明確知道並想要分詞路徑名擴展

文件

來自man ping

-W timeout

等待響應的時間,以秒為單位。該選項僅在沒有任何響應的情況下影響超時,否則 ping 會等待兩個 RTT。

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