Bash

Ping:結果顯示 56(84) 而不是預期的

  • May 7, 2015

我正在嘗試修改腳本以顯示失去的數據包以及 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 上執行該行時,它可以工作並只顯示第三組,但是當我在腳本中一起執行它時,出現錯誤。

我想知道是否應該在腳本中將其放入第二個。

編輯:我想我應該添加,腳本以原始方式工作(沒有丟包結果)。

原來的:

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

沒有雙引號$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

引用自:https://unix.stackexchange.com/questions/201905