staging.inyokaproject.org

Array

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

fireworker72

Anmeldungsdatum:
11. März 2017

Beiträge: 64

Hallo die Runde

Ich bitte um eure Hilfe

Ich vergleiche 2 Array in einer schleife und gebe die Änderungen aus

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

Busweg=()
 for i in "${ibuttons[@]}"; do
     skip=
    for j in "${array[@]}"; do
         [[ $i == $j ]] && { skip=1; break;  }
    done
    [[ -n $skip ]] || Busweg=("$i")
done 

echo "am Bus fehlt" ${Busweg[@]}  #Ausgabe ist eine Zahl 123456789 die sich aber auch ändert 

das funktioniert auch so, Ich möchte die Änderung dann per UDP versenden (funktioniert auch)

Aber: Wie kann Ich es machen das die Änderung nur einmal gesendet wird und nicht bei jedem schleifen Durchlauf?

Also die Zahl ändert sich → einmalige Ausgabe der Zahl

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@fireworker72: Ich bin von $Busweg ein wenig verwirrt. Das ist ein Array das grundsätzlich nur 0 oder 1 Element enthält, womit das ziemlich sinnlos ist das als Array zu verwenden. Kann es sein das Du in dem Array eigentlich alle Werte sammeln willst und nicht nur das letzte nach der Schleife dort drin haben möchtest‽ Zudem scheint mir $skip überflüssig zu sein, denn das wird in der Schleife gesetzt und dann wird die Schleife abgrebrochen, um gleich nach der Schleife etwas aufgrund von $skip zu machen, was man auch direkt in der Schleife hätte machen können. So ist das einfach nur etwas komplizierter mit einer zusätzlichen Variable.

Kann es sein, dass Du so etwas hier suchst?:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Busweg=()
for i in "${ibuttons[@]}"; do
    for j in "${array[@]}"; do
        if [[ $i = "$j" ]]; then
            Busweg+=("$i")
            break
        fi
    done
done 

# Ausgabe ist eine Zahl 123456789 die sich aber auch ändert.
echo "am Bus fehlt ${Busweg[*]}"

fireworker72

(Themenstarter)

Anmeldungsdatum:
11. März 2017

Beiträge: 64

Also zu Erklärung

Ich habe eine Datei wo z.B 20 berechtigte Seriennummern drinnstehen Array "ibuttons" und Ich überwache einen 1Wire Bus wo Ich Seriennummern einlese in Array "array"

ich möchte jetzt in einer schleife den Bus einlesen und vergleichen ob sich etwas geändert hat. Also es kommt ein IButton auf den Leser und und Ich bekomme am Bus seine Seriennummer die soll jetzt mit den Seriennummern in der Datei verglichen werden wenn es übereinstimmt soll er einmal per UDP die "Seriennummer" mit dem Zusatz anwesend senden, aber eben nur einmal da der IButton am Bus bleibt. Wenn der Ibutton vom Bus entfernt wird soll einmal per UDP "Seriennummer abwesend" gesendet werden aber eben auch nur einmal. Wenn ein IButton an Bus kommt der nicht in der Liste steht soll einmal "Seriennummer nicht berechtigt" per UDP gesendet werden

Das ganze läuft in einer schnellen Schleife da die erkennung nicht länger als ca. 1 Sekunde dauern sollte

Das Script zum Vergleichen hab Ich wo rauskopiert und da war das mit dem Skip so drinn

Antworten |