Schlüssel-Wert Paare in Shellskript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Schlüssel-Wert Paare in Shellskript

Beitrag von hupfdule » 16.09.2008 10:32:41

Hallo,

ich benötige in einem Skript eine Reihe von Schlüssel-Wert Paaren. Diese sollen aus einer Datei ausgelesen werden. Dass die Bash Schlüssel-Wert Paare nicht direkt unterstützt, ist mir bekannt. Was ich mir vorstelle, ist etwas in der Art:

Eingelesene Datei:

Code: Alles auswählen

key1 = value1
key2 = value2
Skriptabschnitt im Pseudocode:

Code: Alles auswählen

for zeile in datei; do
   KEY=...
   VALUE=...
done
Ich will also jede Zeile der Datei nacheinander bearbeiten und aus jeder den Schlüssel und den Wert in einer Variablen speichern.

Irgendwelche Ideen, wie das am sinnvollsten verwirklicht werden kann? Schön wäre es, wenn das ganze noch POSIX-konform wäre. Ist aber kein zwingendes Muss.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von Duff » 16.09.2008 12:10:26

Meinst du vielleicht sowas?

Code: Alles auswählen

#!/bin/bash

file=/tmp/datei

typeset -i i=0

while read vararray[$i]
do
   i=$((i+1))
done < $file

# Anzahl der Elemente im Array
echo "Anzahl der Elemente im Array: ${#vararray[*]}"

# Gesamtes Array ausgeben
echo "Gesamtes Array ausgeben:"
echo "${vararray[@]}"

# Bestimmten Wert des Array ausgeben
echo "Den 2ten Wert des Arrays ausgeben: ${vararray[1]}"
echo ""

typeset -i x=0

while [ $x -lt  ${#vararray[*]} ]
do
   echo ${vararray[$x]}
   x=$((x+1))
done
Die Datei:

Code: Alles auswählen

key1	= value1
key2	= value2 mit mehreren Werten
key3	= value3
Ausgabe:

Code: Alles auswählen

daniel@daniel-laptop:/tmp$ ./test.sh 
Anzahl der Elemente im Array: 4
Gesamtes Array ausgeben:
key1	= value1 key2	= value2 mit mehreren Werten key3	= value3 
Den 2ten Wert des Arrays ausgeben: key2	= value2 mit mehreren Werten

key1 = value1
key2 = value2 mit mehreren Werten
key3 = value3
Oh, yeah!

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von hupfdule » 16.09.2008 13:11:53

Ja, das sieht schon sehr gut aus!
Ich habe noch etwas experimentiert und bin auf eine noch simplere, für mich geeignete Variante gestoßen:

Code: Alles auswählen

while read KEY VALUE ; do                                                                               
   echo $KEY" = "$VALUE
done < $DATEI                                                                                                        
Die Eingangsdatei:

Code: Alles auswählen

key1    value1
key2    value2 mit mehreren Werten
key3    value3
Besten Dank für die Hilfe.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von Duff » 16.09.2008 13:35:56

Kein Problem, aber so wie du es beschrieben hast ist auf jeden Fall einfacher.

Ansonsten hätte ich noch auf perl hingewiesen. Dort gibt es den hash für solche Sachen.
Oh, yeah!

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von roli » 16.09.2008 14:15:38

Hi,
hupfdule hat geschrieben:ich benötige in einem Skript eine Reihe von Schlüssel-Wert Paaren. Diese sollen aus einer Datei ausgelesen werden.
vielleicht mache ich's mir gerade was einfach, aber das sollte doch gehen wenn du die "Schluessel-Wert Datei" einfach souce'st, oder?
also sowas:

Code: Alles auswählen

#dies ist Datei 1
...

#einlesen der Schluessel-Wert Paare aus Datei 2
. ./datei2

#Verwenden der Daten
echo "Key=$key"
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von hupfdule » 16.09.2008 14:35:11

Nein, ganz so einfach ist es leider nicht. Denn auch die Schlüssel sollen in einer Variablen gespeichert werden. Die stehen nicht fest im Skript. In deinem Beispiel müsste ich im Skript fest auf die Variable $key zugreifen. Das will ich aber nicht. Ich will sowohl Key, als auch Value in einer Variablen speichern.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von roli » 16.09.2008 15:09:20

Hi,

schade, meine Idee war was das Einlesen angeht aber die keurzeste ;-}
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Re: Schlüssel-Wert Paare in Shellskript

Beitrag von hupfdule » 16.09.2008 15:11:49

Das sei dir unbenommen. :-)

Antworten