我刚刚制作了这个用于主机监控的脚本。
目标是 ping 主机并将输出记录到文件中,同时还将输出显示到终端。如果主机没有响应,它将记录时间以及相应的错误消息。目标是记录上/下时间的时间戳。
#!/bin/bash
DATE=$(date +"%d.%m.%Y %T")
SHORT_DATE=$(date +"%d.%m.%Y")
echo
echo "Pinging host " $@
echo
HOST=$@
ping $HOST | while read PONG
do
grep ttl <<< "$PONG"
if [ $? -eq 0 ]; then
echo "`date`: $PONG"
echo "`date`: $PONG" &>> ping_check_$SHORT_DATE.log
else
echo "`date`: ping failed, $HOST host is DOWN!" &>> ping_check_$SHORT_DATE.log
echo "$PONG" &>> ping_check_$SHORT_DATE.log
fi
done
现在的问题是,当 ping 成功时,脚本的输出如下所示(我得到两行输出,并且不需要第一行):
[spirit@vas scripts]$ ./ping_check3.sh 10.10.0.254
Pinging host 10.10.0.254
64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
Wed Jun 3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
Wed Jun 3 10:35:53 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
64 bytes from 10.10.0.254: icmp_seq=3 ttl=255 time=1.34 ms
以上输出来自终端。我只需要带有时间戳的结果,而不需要来自其ping $HOST
本身的第一行?:
Wed Jun 3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
如何修复脚本,以便在输出中仅显示带有时间戳的行?
编辑:
只是为了澄清:
日志文件的输出如下所示:
Wed Jun 3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
Wed Jun 3 10:35:53 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
Wed Jun 3 10:35:54 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=3 ttl=255 time=1.34 ms
Wed Jun 3 10:35:55 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=4 ttl=255 time=1.58 ms
答案1
只需编辑:
grep ttl <<< "$PONG"
到:
grep -q ttl <<< "$PONG"
您得到的输出来自grep
.有了-q
旗帜grep
就安静了。