Vergleich von Arrays in der Shell

ShellBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie man Arrays in der Shell-Programmierung vergleicht. Arrays sind nützliche Datenstrukturen zum Speichern mehrerer Werte, und ihr Vergleich ist eine häufige Aufgabe in der Programmierung. Sie werden mit drei Arrays arbeiten und ein Skript entwickeln, um die gemeinsamen Elemente zwischen ihnen zu identifizieren. Dieser Prozess hilft Ihnen dabei, den Umgang mit Arrays, Schleifen und bedingten Anweisungen in Shell-Skripten zu verinnerlichen.

Skriptdatei erstellen

Zuerst erstellen wir eine neue Datei für unser Skript.

  1. Öffnen Sie ein Terminal in der WebIDE. Sie sollten eine Eingabeaufforderung sehen, die mit einem $-Zeichen endet.

  2. Wechseln Sie in das Projektverzeichnis:

cd ~/project

Dieser Befehl ändert Ihr aktuelles Verzeichnis in den Projektordner. Das Symbol ~ steht für Ihr Home-Verzeichnis, und /project ist ein Unterordner darin.

  1. Erstellen Sie eine neue Datei mit dem Namen array-comparison.sh:
touch array-comparison.sh

Der Befehl touch erstellt eine leere Datei. Falls die Datei bereits existiert, wird lediglich der Zeitstempel aktualisiert, ohne den Inhalt zu verändern.

  1. Öffnen Sie die Datei im Editor der WebIDE. Klicken Sie dazu einfach auf den Dateinamen im Datei-Explorer auf der linken Seite Ihrer WebIDE-Oberfläche.

Shebang hinzufügen und Arrays initialisieren

Beginnen wir nun mit dem Schreiben des Skripts, indem wir den Shebang hinzufügen und unsere Arrays initialisieren.

  1. Fügen Sie den folgenden Inhalt in die Datei array-comparison.sh ein:
#!/bin/bash

## Initialize the arrays
a=(3 5 8 10 6)
b=(6 5 4 12)
c=(14 7 5 7)

Hier ist die Erklärung dazu:

  • Die erste Zeile #!/bin/bash wird Shebang genannt. Sie weist das System an, den Bash-Interpreter zu verwenden, um dieses Skript auszuführen. Diese Zeile ist für jedes Shell-Skript essenziell.
  • Danach initialisieren wir drei Arrays: a, b und c. In der Bash werden Arrays definiert, indem die Elemente in Klammern () eingeschlossen und durch Leerzeichen getrennt werden.
  • Jedes Array enthält verschiedene ganzzahlige Werte. Wir werden diese nutzen, um die Übereinstimmungen zu finden.

Die erste Vergleichsschleife implementieren

Wir implementieren nun die erste Vergleichsschleife, um die gemeinsamen Elemente zwischen den Arrays a und b zu finden.

Fügen Sie den folgenden Code zu Ihrem Skript hinzu:

## Initialize an array to store common elements between a and b
z=()

## Compare arrays a and b
for x in "${a[@]}"; do
  for y in "${b[@]}"; do
    if [ $x = $y ]; then
      z+=($x)
    fi
  done
done

echo "Common elements between a and b: ${z[@]}"

Lassen Sie uns diesen Code im Detail betrachten:

  • z=() initialisiert ein leeres Array z, um die gemeinsamen Elemente zu speichern.
  • for x in "${a[@]}" ist eine Schleife, die jedes Element im Array a durchläuft. Die Syntax "${a[@]}" expandiert zu allen Elementen des Arrays.
  • Darauf folgt eine verschachtelte Schleife for y in "${b[@]}", die jedes Element im Array b durchläuft.
  • if [ $x = $y ] prüft, ob das aktuelle Element aus a mit dem aktuellen Element aus b übereinstimmt.
  • Bei Gleichheit fügen wir dieses Element mit z+=($x) zum Array z hinzu.
  • Schließlich geben wir die gemeinsamen Elemente mit echo "Common elements between a and b: ${z[@]}" aus. Die Syntax ${z[@]} gibt dabei alle Elemente des Arrays z aus.

Die zweite Vergleichsschleife implementieren

Nun implementieren wir die zweite Vergleichsschleife, um die gemeinsamen Elemente zwischen dem Array c und den zuvor gefundenen Elementen im Array z zu finden.

Fügen Sie den folgenden Code zu Ihrem Skript hinzu:

## Initialize an array to store common elements among a, b, and c
j=()

## Compare array c with the common elements found in z
for i in "${c[@]}"; do
  for k in "${z[@]}"; do
    if [ $i = $k ]; then
      j+=($i)
    fi
  done
done

echo "Common elements among a, b, and c: ${j[@]}"

Dieser Code ähnelt der vorherigen Schleife, weist jedoch einige wichtige Unterschiede auf:

  • Wir initialisieren ein neues leeres Array j für die endgültigen gemeinsamen Elemente.
  • Die äußere Schleife for i in "${c[@]}" durchläuft die Elemente in Array c.
  • Die innere Schleife for k in "${z[@]}" durchläuft die gemeinsamen Elemente, die wir zwischen a und b gefunden haben (gespeichert in z).
  • Wir vergleichen die Elemente aus c mit denen aus z. Bei einer Übereinstimmung fügen wir das Element dem Array j hinzu.
  • Am Ende geben wir die Elemente aus, die in allen drei Arrays vorkommen.

Skript ausführbar machen und starten

Nachdem wir unser Skript fertiggestellt haben, müssen wir es ausführbar machen und ausführen.

  1. Machen Sie das Skript im Terminal ausführbar:
chmod +x ~/project/array-comparison.sh

Der Befehl chmod ändert die Dateiberechtigungen. Die Option +x fügt die Ausführungsberechtigung hinzu, sodass Sie das Skript starten können.

  1. Führen Sie das Skript aus:
~/project/array-comparison.sh

Dieser Befehl führt Ihr Skript aus. Der Teil ~/project/ gibt den Pfad zur Datei an.

Sie sollten eine Ausgabe wie diese sehen:

Common elements between a and b: 5 6
Common elements among a, b, and c: 5

Diese Ausgabe zeigt:

  • Die gemeinsamen Elemente der Arrays a und b sind 5 und 6.
  • Das einzige gemeinsame Element aller drei Arrays (a, b und c) ist die 5.

Falls Sie diese Ausgabe nicht sehen oder ein Fehler auftritt, prüfen Sie Ihr Skript bitte auf Tippfehler oder fehlende Zeichen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man Arrays in Shell-Skripten vergleicht. Sie haben ein Skript erstellt, das mithilfe von verschachtelten Schleifen und bedingten Anweisungen gemeinsame Elemente in drei Arrays findet. Diese Übung hat zentrale Konzepte der Shell-Programmierung demonstriert, darunter:

  1. Erstellen und Initialisieren von Arrays.
  2. Verwendung verschachtelter Schleifen zum Vergleich von Array-Elementen.
  3. Bedingte Anweisungen zur Prüfung auf Gleichheit.
  4. Dynamisches Hinzufügen von Elementen zu Arrays.
  5. Ein Skript ausführbar machen und im Terminal ausführen.

Diese Fähigkeiten sind grundlegend für die Shell-Programmierung und können in Zukunft auf komplexere Datenverarbeitungsaufgaben angewendet werden. Je mehr Sie mit Shell-Skripten arbeiten, desto mehr werden Sie feststellen, dass die Manipulation von Arrays ein mächtiges Werkzeug zur effizienten Verwaltung von Datensätzen ist.

Denken Sie daran: Übung ist der Schlüssel zum Erfolg. Versuchen Sie, das Skript so zu modifizieren, dass es mit anderen Arrays arbeitet oder beispielsweise eindeutige Elemente findet, die nur in einem der Arrays vorkommen. Viel Spaß beim Skripten!