Ping 结果到日志脚本 (El Capitan)

Ping result to log script (El Capitan)

我正在研究 mac 运行 El Capitan。

对于我一直从事的项目,我正在尝试编写一个简单的脚本来记录 ping 时间。我得出的结论并不像我想的那么简单。我的第一个问题是 "Ambiguous redirect" 使用变量时。在 $INPUT Ambiguous redirect

的帮助下,我已经更正了这一点,在变量周围使用引号

但是现在 运行 以下脚本时出现不同的错误:

#!/bin/sh

set PINGDELAY=1.5
set PINGIP=google.nl
set PINGLOG=~/Library/Logs/doctorping.log

sudo ping -i "$PINGDELAY" "$PINGIP" | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' >> "$PINGLOG"

错误是

ping: invalid timing interval: `'

这可能是我忽略的一点,但在脚本和编程方面我是一个真正的菜鸟。

我的目标不是处理文本或提取其中的位,它只是监视连接并将结果写入日志。限制日志行的数量可能是明智的,但我稍后会谈到这一点。 (当然,如果有人能指出我正确的方向,我将不胜感激,但首先是第一件事)

谢谢!

如果你像这样使用 bash 而不是 sh:

就可以正常工作
#!/bin/bash -xv

PINGDELAY=1.5
PINGIP=google.nl
PINGLOG=~/Library/Logs/doctorping.log

sudo ping -i "$PINGDELAY" "$PINGIP"

-xv 仅用于调试 - 您可以安全地删除它。

set命令不是设置shell变量;它用于设置 shell 执行选项 and/or 替换脚本的参数列表。把它关掉。此外,最好使用小写(或混合大小写)变量名,以避免意外使用对 shell 具有特殊意义的变量之一。这是我得到的:

#!/bin/sh

pingdelay=1.5
pingIP=google.nl
pinglog=~/Library/Logs/doctorping.log

sudo ping -i "$pingdelay" "$pingIP" | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' >> "$pinglog"