Brauche Hilfe

Post Reply
Message
Author
rbtux
Posts: 69
Joined: 23. Jun 2004 11:59

Brauche Hilfe

#1 Post by rbtux »

Ich möchte ein Shellskript programmieren, welches eine Datei einliest

auf jeder Zeile steht ein eintrag=wert

für den eintrag existiert eine Variable welche ich mit dem Wert füllen möchte

anderseits möchte ich auch aus einer Variable den eintrag wieder setzen

geht das mit sed?

Kann mir da evtl. jemand helfen
Computer führen dazu, dass man die alten Fehler jetzt 100 mal schneller macht ;)

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#2 Post by kanonenfutter »

> für den eintrag existiert eine Variable welche ich mit dem Wert füllen möchte

dazu würde es doch genügen, die datei zu "sourcen": source DATEI.

> anderseits möchte ich auch aus einer Variable den eintrag wieder setzen

ich versteh nicht, was du meinst.

PS: generell ist es sinnvoll, inhaltsbezogene subjects zu verwenden. "brauche hilfe" könnte man für jeden thread nehmen.
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

rbtux
Posts: 69
Joined: 23. Jun 2004 11:59

#3 Post by rbtux »

Danke erstmal

Also ich versuchs nochmal.

ich habe eine Datei z.b /etc/conf

in dieser stehen:

eintrag1=wert1
eintrag2=wert2
eintrag3=wert3

Ich möchte jetzt per Shellskript für jeden Wert den User fragen ob er den Bestehenden wert auswählen möchte oder einen anderen eingeben will:

Der angegebene Wert (falls nichts angegeben ist soll wert unverändert bleiben) soll dann vom Skript natürlich wieder in die Datei geschrieben werden!

Ich hoffe es war jetzt verständlicher!
Computer führen dazu, dass man die alten Fehler jetzt 100 mal schneller macht ;)

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#4 Post by kanonenfutter »

das ist ja wie im krimi -- die interessanten details kommen erst nach und nach zum vorschein. jetzt soll auch noch eine user-interaktion eingebaut sein.....

das wird dann etwas aufwendiger. du willst hier sozusagen einen conf-file-editor bauen (warum ruft dein skript nicht einfach einen editor? ist doch viel bequemer als aller werte einzeln abklappern zu müssen, auch wenn man womöglich gar nichts ändern will).

sicher gibt es mehrere millionen möglichkeiten, so ein skript zu implementieren. man könnte zb die wertepaare einlesen (mit WHILE read .... < FILE. trennen von key/value mittels parametersubstitution oder mit IFS="=") und gleichzeitig für jeden wert den neuen wert abfragen. (wenn neuer wert=="", bleibt der alte bestehen). das neue wertepaar kann man dann (falls geändert) mit perl direkt neu schreiben, oder man speichert alle wertepaare direkt mit echo in einer temporären datei, die dann am ende die ursprüngliche datei ersetzt. dazu würde dann eine einzige while-schleife genügen.
ist es das, was du dir vorgestellt hast? bevor ich hier fertigen code liefere warte ich erstmal, ob noch bessere vorschläge kommen, denn wie gesagt: es gibt viele möglichkeiten.
das grobe gerüst würde dann etwa so aussehen:

Code: Select all

#!/bin/bash
DATEIALT=/etc/conf~
DATEINEU=/etc/conf
mv -f $DATEINEU $DATEIALT 

MYIFS=$IFS
IFS="="
while read KEY VALUE; do
	echo -n "$KEY=$VALUE. neuer Wert?&#58; "
	read NEWVAL
	&#91; "$NEWVAL" = "" &#93; || VALUE=$NEWVAL
	echo $KEY=$VALUE >> $DATEINEU
done < $DATEIALT

IFS=$MYIFS
hier wird natürlich das format der conf-datei überhaupt nicht geprüft, es wird angenommen, dass alles ok ist und auch, dass der user das skript nicht abbricht.
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

rbtux
Posts: 69
Joined: 23. Jun 2004 11:59

#5 Post by rbtux »

Hy,

Code: Select all

echo -n "$KEY=$VALUE. neuer Wert?&#58; " 
   read NEWVAL 
das war der Teil des Skripts den ich nicht lösen konnte. Habe nicht fiel erfahrung mit Bash (wie du wahrscheinlich gemerkt hast!)

Ich hoffe ich krieg den rest jetzt selber hin.

Vielen Dank
Computer führen dazu, dass man die alten Fehler jetzt 100 mal schneller macht ;)

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#6 Post by kanonenfutter »

nanu, das parsen der datei hast du hingekriegt, aber beim ausgeben eines textes (echo) und lesen von tastatur (read) hattest du probleme?
ich versteh die welt nicht mehr....;-)

dabei fällt mir ein, dass es so wohl noch nicht geht, weil das read ja innerhalb der "while read"-schleife steht (er liest dann von datei statt von tastatur).
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

rbtux
Posts: 69
Joined: 23. Jun 2004 11:59

#7 Post by rbtux »

Da hast du galub was falsch verstanden,

echo ist glaub so ziemlich der erste teil von bash den ich kennengelernt habe

read kannte ich einfach nicht und habe auch nicht auf anhieb etwas gefunden.

also danke nochmal
Computer führen dazu, dass man die alten Fehler jetzt 100 mal schneller macht ;)

Post Reply