
핑 반환에서 시간을 어떻게 제거할 수 있나요? 예를 들어:
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
사용할 수 있습니다 .awk
sh
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"