2016-06-20 6 views
2

Ich arbeite an einem Mac mit El Capitan.Ping Ergebnis zu Protokoll Skript (El Capitan)

Für ein Projekt, an dem ich gearbeitet habe, versuche ich ein einfaches Skript zu schreiben, um Ping-Zeiten zu protokollieren. Ich bin zu dem Schluss gekommen, dass es nicht so einfach ist, wie ich gedacht habe. Mein erstes Problem war "Mehrdeutige Umleitung" bei der Verwendung von Variablen. Ich, dass korrigiert habe, Anführungszeichen um Variablen, mit Hilfe von $INPUT Ambiguous redirect

Aber jetzt bekomme ich einen anderen Fehler, wenn Sie das folgende Skript ausgeführt wird:

#!/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" 

Der Fehler ist

ping: invalid timing interval: `' 

Es ist wahrscheinlich etwas, was ich übersehen habe, aber ich bin ein echtes Noob, wenn es um Scripting und Programmierung geht.

Mein Ziel ist es nicht, Text zu verarbeiten oder Bits daraus zu extrahieren, es dient nur dazu, Verbindungen zu überwachen und die Ergebnisse in das Protokoll zu schreiben. Es wäre wahrscheinlich klug, die Anzahl der Protokollzeilen zu begrenzen, aber dazu komme ich später. (würde natürlich geschätzt, wenn jemand mich in die richtige Richtung zeigen könnte, aber zuerst die Dinge zuerst)

Vielen Dank!

Antwort

2

Der Befehl set ist nicht Shell-Variablen festlegen; Es wird verwendet, um Shell-Ausführungsoptionen festzulegen und/oder die Argumentliste des Skripts zu ersetzen. Lass es einfach weg. Außerdem sollten Sie Kleinbuchstaben (oder Groß- und Kleinbuchstaben) verwenden, um zu vermeiden, dass Sie versehentlich eine der Variablen verwenden, die etwas Besonderes für die Shell bedeutet. Hier ist, was ich bekomme:

#!/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

Guter Punkt über die Großschreibung. –

+0

funktioniert jetzt wie ein Zauber! Vielen Dank! :) – user263700

2

Es funktioniert gut, wenn Sie bash wie diese verwenden, anstatt sh:

#!/bin/bash -xv 

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

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

Die -xv nur für das Debuggen ist - Sie können es sicher entfernen.

Verwandte Themen