[fli4l] Hilfe für?==?utf-8?Q? Skript-Logik

K. Dreier usenetforum at gmx.net
Mi Feb 22 16:58:51 CET 2017


Hallo,

> So viel Code mit IF die Hintereinander aufgerufen werden. Wie willst
> Du 
> das in ein paar Wochen verstehen

Habe es ja kommentiert. ;-)

> oder gar warten? Das sieht sehr 
> kompliziert aus, so kompliziert, dass ich gar nicht verstehen kann,
> ob 
> es richtig ist.

Das finde ich nun wirklich nicht sehr kompliziert, aber ich verstehe
natürlich auch, was ich will. Heisst nicht, daß ich es richtig gemacht
habe. :-)

> Nehmen wir einmal an, es gibt einen Signal (in Deinem Fall das
> Device, 
> welches On- oder Offline ist) das zwei Zustände hat: 0 oder 1.

Richtig.

> Das 
> "Problem" bei diesem Signal ist, das es jede 30 Sekunden für eine
> halbe 
> Sekunde invertiert wird. Was nutzt es Dir, in so einer Situation
> alle 15 
> Sekunden zu schauen welchen Wert Du bekommst? Du weißt ja nie, ob
> Du 
> genau in einer von den vielen halben Sekunden "misst", in der das
> Signal 
> invertiert ist.

Da hast du natürlich recht. Und ich meine sogar, bereits 2x in den
Output file rein geschaut zu haben und er war leer! Das wäre dann genau
so eine Situation. Denn ca. 3 Sekunden später (raus und wieder rein),
war ein Inhalt vorhanden.

> Deswegen solltest Du bei so einem Signal Deine Messung 
> sinnvoll ausweiten, z.B.: In einem Messzeitraum von 5 Sekunden haben
> ich 
> 10 Messungen durchgeführt, bei denen 9 eine 1 ergeben und eine
> Messung 
> eine 0 ergeben haben. Deswegen sage ich: "Meine Messung hat 1
> ergeben"

Gut, leuchtet mir absolut ein.

Also deswegen nun mein Versuch zu verstehen, was du geschrieben hattest.
Gerne bitte korrigieren. :-)

#!/bin/sh
file_to_check=/tmp/x1

 check_existance() { # definiere ein leeres Array, welche in Folge
"gefüllt" wird

 local i # erstelle Variable "i"

 local check # erstelle Variable "check"

 local checks # erstelle Variable "checks"

 i=3 # setze Variable i auf Wert "3"

 checks=0 # setze Variabe checks auf Wert "0"

 while test "${i}" -gt 0; do # wenn und solange Variable i größer als
0 ist, mache das danach folgende; wir starten also eine Schleife

 check=$(grep -c -i "100% packet loss" "${file_to_check}") # wir
definieren den Wert der Variable "check", hier gegen den Inhalt meines
files, welcher je nach ping-Ergebnis befüllt ist

 checks=$(expr ${checks} + ${check}) # wir definieren den (neuen) Wert
der Variable "checks"; hier den Wert von "check" (0 oder 1) plus den
Wert von "checks"; bis da hin war "checks" = 0, d.h. das Ergebnis wäre
in der ersten Runde 1, davon ausgehend, daß das Ergebnis der Variable
"check" 1 ergab - korrekt?

 i=$(expr ${i} - 1) # wir definieren den (neuen) Wert der Variabe "i";
hier subtrahieren wir den Wert 1 vom bisherigen Wert der Variable "i";
bis dahin war das der Wert 3 im ersten Durchlauf. Im Ergebnis also nun 2
als neuer Wert für Variable "i" nach dem ersten Durchlauf.
 sleep 1
 done # Ende der Schlaufe
 echo ${checks}
 } # das Array wurde definiert mit einem neuen Wert für "i" und
"checks"; es wurde also 3x mein file abgefragt (= "check"); als Ergebnis
also haben wir Werte von 0 bis max 3 für den Wert des Arrays, korrekt?

 exists=$(check_existance) # exists (= meine Variable anhand derer ich
in meinem Skript anschliessend Zustand definiere/prüfe) wird auf den
Wert des Arrays "check_existance" gesetzt, nachdem die Schlaufe zu einem
Ende kam. Also 0-3, siehe zuvor.

Habe ich das richtig verstanden?

Gruß
Klaus


Mehr Informationen über die Mailingliste Fli4L