Ping: 결과가 예상 결과 대신 56(84)을 표시합니다.

Ping: 결과가 예상 결과 대신 56(84)을 표시합니다.

손실된 패킷과 핑 결과를 표시하도록 스크립트를 수정하려고 합니다. 스크립트의 일부 명령이 회사마다 다르기 때문에 작동하지 않는 부분만 포함하고 있습니다.

for myHost in $HOSTS; do
   PINGFULL=$(ping -f -c 1000 "$myHost")
   PINGLOSS=$(echo $PINGFULL | grep loss | cut -d ',' -f 3 | grep -Eo '[0-9]{1,4}')
   PINGVAL=$(echo $PINGFULL | head -n 5 | tail -1 | cut -d ' ' -f 4)
   echo "$PINGVAL"
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PINGVAL / $PINGLOSS" 
done

예상되는 결과는

2015-05-06_19:00:21 / 192.168.20.102 / 0.157/0.329/0.410/0.023 / 0

내가 얻는 것은

2015-05-06_18:43:11 / 192.168.1.101 / 56(84) / 0

$PINGVAL은 혼란이 시작되는 곳입니다.

특정 줄을 얻기 위해 head/tail 및 grep을 사용해 보았습니다. cli에서 실행하면 작동하고 세 번째 그룹만 표시되지만 스크립트에서 함께 실행하면 오류가 발생합니다.

두 번째로 스크립트에 넣어야할지 궁금합니다.

편집: 추가해야 한다고 생각했는데 스크립트는 원래 방식으로 작동합니다(결과적으로 패킷 손실 없음).

원래:

for myHost in $HOSTS; do
   PING=$(ping -f -c 1000 "$myHost" |grep 'rtt' | awk '{print $4}')
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PING" >> "$LOGFILE" 2>&1
  done

답변1

큰따옴표가 없으면 $PINGFULL여러 줄이 한 줄로 바뀌므로 첫 번째 줄이 표시됩니다.

또한 rtt 통계는 마지막 줄에 있으므로 생략하세요 head -n 5.

for myHost in $HOSTS; do
   PINGFULL=$(ping -c 5 "$myHost")
   PINGLOSS=$(echo "$PINGFULL" | grep loss | cut -d ',' -f 3 | grep -Eo '[0-9]{1,4}')
   PINGVAL=$(echo "$PINGFULL" | tail -1 | cut -d ' ' -f 4)
   echo "$PINGVAL"
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PINGVAL / $PINGLOSS" 
done

관련 정보