[fli4l] Skript: Abfrage + Verarbeitung des Zustands mehrerer Geräte - generisch gehalten

Thomas Grunenberg tho_gru at gmx.de
So Mär 12 21:14:54 CET 2017


Am 12.03.2017 um 09:24 schrieb K. Dreier:
> Hallo,
>
...
> Aktuell sieht es so aus (nur die relevanten Teile):
> device1="GERAETENAME1" # wie im fli4l-HOST-Eintrag definiert
> device2="GERAETENAME2"
> [...]
> exists_device1="$(check_device1)" # Funktion zum checken erfolgte
> vorher, hier nicht dargestellt
> exists_device2="$(check_device2)"
> [...]
> if [ ${exists_device1} -gt 0 ] && [ -f
> /var/run/arping.stat/${device1}.online ] ; then
> device1_online="true"
> else
> device1_online="false"
> fi
> if [ ${exists_device2} -gt 0 ] && [ -f
> /var/run/arping.stat/${device2}.online ] ; then
> device2_online="true"
> else
> device2_online="false"
> fi
> [...]
> if [ ${device1_online} = "true" ] || [ ${device2_online} = "true" ] ;
> then
> [...]
> usw.
>
...
> Hat jemand Ideen? Bin gespannt.
>
> Danke und Gruß
> Klaus
>
Hallo Klaus,

So etwas geht ganz allgemein mit Listen oder Arrays (im Grunde 
strukturierten Datentypen). In Shells wird so etwas meines Wissens 
leider nur rudimentär unterstützt.

Das Prinzip:
Du nutzt zwei Arrays: Eines für die Devicenamen (z.B. DeviceNames) und 
eines für die Zustände der Device (z.B. DeviceState). Zusätzlich 
benötigst Du noch die absolute Anzahl der Devices, die Du überwachen 
willst (z.B. die Variable DeviceCount). Dann baust Du ein Schleife wie:
for $i = 1 to $DeviceCount; do
	DeviceState[$i]=$(getDeviceState(DeviceName[$i]))
done
In obigem Pseudocode ist getDeviceState eine Funktion, welche den 
Zustand eines Device zu einem Devicenamen ermittelt und auf stdout 
zurück gibt.

Das obige Beispiel stellt das grundsätzliche Vorgehen dar. In einer 
Shell sieht das alles wegen der Syntax nicht mehr so einfach aus (siehe 
[1] oder [2]).

Viel Erfolg und Frust-Resistenz beim Lernen.

Gruß
Thomas

[1] http://stackoverflow.com/questions/29295276/how-to-use-array-in-ash
[2] http://lists.busybox.net/pipermail/busybox/2004-July/012110.html



Mehr Informationen über die Mailingliste Fli4L