ping:結果は予想結果の代わりに56(84)を表示します。

ping:結果は予想結果の代わりに56(84)を表示します。

失われたパケットと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

おすすめ記事