Here is my sample :
PING my.host.local (10.10.10.10): 56 data bytes
64 bytes from 10.10.10.10: icmp_seq=0 ttl=63 time=2.034 ms
--- my.host.local ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.034/2.034/2.034/0.000 ms
私は次のことをしたいと思います:/ 64 bytes /なら、次のように印刷します: "'my.host.local' is up"
問題は、/ 64バイト/の正規表現を実行すると、ホスト名「my.host.local」を示す行が失われ、そのフィールドを使用して最終メッセージを印刷できないことです。
あなたは何をしますか?
乾杯、
答え1
変数を使用してホスト名を保存します。
awk '/^PING/ { host = $2 } /^64 bytes/ { print host " is up" }'
ホストがダウンしたときに何かをするには、応答が見えるかどうかに注意を払い、最後に両方のケースを処理する必要があります。
awk '/^PING/ { host = $2 }
/^64 bytes/ { up = 1 }
END {
if (up) { print host " is up" }
else { print host " is down" }
}'
答え2
次のようなことができます
ping -c 1 $machine | awk '
$1 == "PING" {host = $2}
$2 == "bytes" {
if ($1 == 64)
print host " is up"
else
print host " did not ping 64 bytes"
}
'
答え3
おそらくホストを既に知っている(ホストを実行しているのでping
)、64 bytes
次の終了ステータスを使用できるため、テキストを検出する必要はありませんping
。
myhost=my.host.local
if ping -c 1 -t 5 "$myhost" >/dev/null 2>&1
then
printf 'host %s is up\n' "$myhost"
else
printf 'host %s does not appear to be reachable\n' "$myhost"
fi
これはタイムアウトで指定されたホストへのpingを試みます。ユーティリティの終了状態だけが意味があるため、すべての出力を削除します。これは、if
どのブランチを選択するかを決定するために使用されます。
FreeBSDは-t
タイムアウトを秒単位で設定します。 Linuxでは-t
TTLを設定し、ping
2倍の秒数を待ちます。