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
두 배의 시간(초)을 기다립니다.