2016-06-20 43 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只是爲了調試 - 你可以安全地將其刪除。