Login
Newsletter
Werbung

Do, 7. Dezember 2017, 15:00

Shellskripte mit Aha-Effekt: Bash-Arrays

Demo-Adressverwaltung

Jetzt wird es aber Zeit für ein etwas längeres Beispiel. Das folgende Programm stellt eine einfache Adressverwaltung dar, wobei die Namen den Schlüssel bilden und als Wert dann die Adresse im assoziativen Array eingetragen wird. Zur Verwaltung des Arrays stehen zwei einfache Funktionen zur Verfügung. Nach der Deklaration des Arrays »Adresse« als Hash in Zeile 1 wird in den Zeilen 3 bis 7 die Funktion Speichere_Adresse definiert, die Namen und Adresse als Parameter übernimmt und im Hash ablegt.

Die zweite Funktion, Suche_Adresse, stellt zunächst fest, ob der Name als Schlüssel gespeichert ist, und gibt daraufhin die Adresse aus (Zeilen 10- 15). Kann der Name nicht gefunden werden, erfolgt eine Fehlermeldung und es wird der Rückgabewert auf 99 gesetzt (Zeilen 16 - 20).

In den Zeilen 22 bis 27 werden die Adressdaten aus der Datei adressen.csv eingelesen. Dort stehen pro Zeile Name und Adresse getrennt durch ein Semikolon. Diese dient dann auch nach dem Einlesen der Zeile als Trennzeichen für die beiden cut-Befehle (Zeilen 24 und 25), welche die beiden Felder an Speichere_Adresse übergeben.

In den Zeilen 29 - 36 werden dann die Adressdaten mittels Suche_Adresse abgefragt.

01: declare -A Adresse
02:
03: Speichere_Adresse ()
04:   {
05:   Adresse["$1"]="$2"
06:   return $?
07:   }
08:
09:
10: Suche_Adresse ()
11:   {
12:   if [ ${Adresse[$1]+_} ]
13:   then
14:     echo "$1's Adresse lautet ${Adresse[$1]}."
15:     return $?
16:   else
17:     echo "$1's Adresse ist nicht vorhanden."
18:     return 99
19:   fi
20:   }
21:
22: # Adressen aus CSV-Datei einlesen
23: while read LINE; do
24:   NAME=$(echo $LINE | cut -d';' -f1)
25:   ADDR=$(echo $LINE | cut -d';' -f2)
26:   Speichere_Adresse "$NAME" "$ADDR"
27: done < adressen.csv
28:
29: # Testaufrufe
30: Suche_Adresse "Donald Duck"
31: Suche_Adresse "Harry Potter"
32: Suche_Adresse "Jules Maigret"
33: Suche_Adresse "Sherlock Holmes"
34: Suche_Adresse "Herman Munster"
35: Suche_Adresse "Thomas A. Edison"
36: Suche_Adresse "John Doe"

Das folgende Listing zeigt die Ausgabe des Programms.

Donald Duck's Adresse lautet Flower Road 13, Duckburg, Callisota.
Harry Potter's Adresse lautet Privet Drive 4, Little Whinging, UK.
Jules Maigret's Adresse lautet Boulevard Richard-Lenoir 132, Paris, FR.
Sherlock Holmes's Adresse lautet Baker Street 221b, London, UK.
Herman Munster's Adresse lautet Mockingbird Lane 1313, Mockingbird Heights, USA.
Thomas A. Edison's Adresse lautet 37 Christie Street, Menlo Parc, NJ, USA.
John Doe's Adresse ist nicht vorhanden.

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung