Bash
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 上執行該行時,它可以工作並只顯示第三組,但是當我在腳本中一起執行它時,出現錯誤。
我想知道是否應該在腳本中將其放入第二個。
編輯:我想我應該添加,腳本以原始方式工作(沒有丟包結果)。
原來的:
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