我正在使用运行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: `'
这可能是我忽略的东西,但在脚本和编程方面我是一个真正的菜鸟。
我的目标不是处理文本或提取它的位,它只是监视连接并将结果写入日志。限制日志行的数量可能是明智的,但我稍后会谈到。 (当然,如果有人能指出我正确的方向,但首先要做的事情,我们将不胜感激)
谢谢!
答案 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"