将结果记录到日志脚本(El Capitan)

时间:2016-06-20 21:21:38

标签: bash ping osx-elcapitan

我正在使用运行El Capitan的Mac。

对于我一直在研究的项目,我正在尝试编写一个简单的脚本来记录ping时间。我得出结论并不像我想的那么简单。使用变量时,我的第一个问题是“模糊重定向”。在$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: `'

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您使用bash而非sh

,则可以正常使用
#!/bin/bash -xv

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

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

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

答案 1 :(得分:2)

set命令不是设置shell变量;它用于设置shell执行选项和/或替换脚本的参数列表。别这么做吧。此外,最好使用小写(或混合大小写)变量名称,以避免意外使用其中一个对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"