FreeBSD sh의 핑 시간 비교

FreeBSD sh의 핑 시간 비교

핑 반환에서 시간을 어떻게 제거할 수 있나요? 예를 들어:

64 bytes from 10.3.0.1: icmp_seq=0 ttl=63 time=2.610 ms

time=이후의 값을 가져 와서 다음과 같은 테스트에 전달하고 싶습니다 .

if time>=50.0; then do_something; fi

답변1

time따라서 레이블 없이 값만 얻으려면 다음을 수행하십시오 ms.

HOST="127.0.0.1"
PING_MS=`ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); print $NF; exit}'`

이것은 나에게 다음을 제공합니다:

0.058

이제 if 를 테스트하고 싶다면 POSIX 자체는 십진수를 비교할 수 없기 때문에 이에 대해서도 time>=50.0사용할 수 있습니다 .awksh

if echo $PING_MS | awk '{exit $1>=50.0?0:1}'; then
    echo "Ping time is >= 50.0ms."
fi

이를 다음과 같이 단축할 수 있습니다.

if ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); exit $NF>=50.0?0:1}'; then
    echo "Ping time is >= 50.0ms."
fi

FS필드 구분 기호이며 $NF항상 마지막 필드입니다. $NF>=50.0?0:1마지막 필드가 다음인 경우 성공 종료 코드로 종료됩니다 >=50.0. 그렇지 않은 경우 오류 종료 코드입니다. /time=/를 포함하는 행만 일치합니다 time=. 문자열에서 gsub(/ ms/, "");제거됩니다 ." ms"

관련 정보