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

이제 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"

관련 정보