失われたパケットとpingの結果を表示するようにスクリプトを変更しようとしています。スクリプトの一部のコマンドが会社によって異なるため、機能しない部分のみが含まれています。
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で実行すると動作し、3番目のグループのみが表示されますが、スクリプトで一緒に実行するとエラーが発生します。
2番目にスクリプトに入れるかどうか疑問に思います。
編集:追加する必要があると思いましたが、スクリプトは元の方法で動作します(結果的にパケット損失なし)。
オリジナル:
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
行が1行に変わり、最初の行が表示されます。
また、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