핑 반환 시간을 제거하는 방법은 무엇입니까? 예를 들어:
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
사용할 수 있는지 테스트하려면 다음을 수행하십시오 .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"