Grep
過濾 ping 命令的輸出
我有一個相當簡單的小腳本。基本上,它在給定的域上執行 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。