[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