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