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
Brauche Hilfe
Brauche Hilfe
Computer führen dazu, dass man die alten Fehler jetzt 100 mal schneller macht
-
- Posts: 266
- Joined: 10. Sep 2004 14:37
- Contact:
> 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.
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/
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!
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
-
- Posts: 266
- Joined: 10. Sep 2004 14:37
- Contact:
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:
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.
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?: "
read NEWVAL
[ "$NEWVAL" = "" ] || VALUE=$NEWVAL
echo $KEY=$VALUE >> $DATEINEU
done < $DATEIALT
IFS=$MYIFS
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/
Hy,
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
Code: Select all
echo -n "$KEY=$VALUE. neuer Wert?: "
read NEWVAL
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
-
- Posts: 266
- Joined: 10. Sep 2004 14:37
- Contact:
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).
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/