2016-06-20 45 views
2

我正在运行一个运行El Capitan的mac。Ping结果到日志脚本(El Capitan)

对于我一直在努力的项目我试图编写一个简单的脚本来记录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: `' 

这是可能是我忽略了的东西,但当谈到脚本和编程时,我是一个真正的noob。

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

谢谢!

回答

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" 
+0

关于大写字母的好处。 –

+0

现在就像一个魅力!谢谢! :) – user263700

2

如果使用bash这样,而不是sh它工作正常:

#!/bin/bash -xv 

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

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

-xv只是为了调试 - 你可以安全地将其删除。