我写了这个脚本:
#!/bin/bash
target="1.1.1.1"
while true;
do
ping $target -c 1 -v > /dev/null
if [[ $? -ne 0 ]]; then
echo "$(date +"%d/%m/%y %R:%S")" >> netStabilityLog
fi
sleep 5s
done
它工作得几乎完美,只有一个问题。在输出文件netStabilityLog
中,我得到:
28/06/22 17:19:26
28/06/22 17:20:06
28/06/22 17:45
28/06/22 18:36:00
28/06/22 18:51
有时,秒数不显示。这是为什么?
看起来您可能同时运行了多个略有不同的脚本副本,每个副本都写入同一个输出文件。该脚本的至少一个运行版本没有在其输出中添加秒数。
至于脚本本身,我可能会给出我的看法,它摆脱了外部
date
实用程序,并且以不同的方式进行条件输出和重定向。它还整理了丢失的引用。这使用4.2 版中引入的
%(...)T
格式化字符串。该参数导致在创建输出时间戳时使用当前时间。它也不会为每个调用重定向一次,而是只重定向一次,用于外部循环。printf
bash
-1
printf
printf
$?
代码通过ping
直接使用 with摆脱了显式测试if
。ping
不使用(用于详细输出)调用,因为-v
无论如何我们都在丢弃输出。