Textfile im Skript bearbeiten
Hier ist eine mögliche Lösung, daß eine Datei in den Speicher gelesen wird und die eigentliche Arbeit dann auf diesem Speicher erfolgt.
function readfile() { local File=$1 local SaveTo=$2 local -i counter=0 while read line; do eval "$2[$counter]"=\'$line\' counter=$(($counter+1)) done < $File eval "$3"=$counter }
Die Funktion readfile() wird mit dem Dateinamen als ersten und der Variable, die die Datei aufnehmen soll als zweitem Parameter gerufen. Als Rückgabewert liefert sie im dritten Argument die Anzahl gelesener Zeilen. Dies ist wichtig, da zu einer Feldvariablen nicht entschieden werden kann, wie viele Elemente sie enthält.
Auf die einzelnen Zeilen der Datei können Sie nun mittels Variable[Zeilenummer] zugreifen und irgendwann, wenn die Bearbeitung abgeschlossen ist, möchten Sie die Daten auch wieder zurück schreiben. Hierzu verhilft Ihnen die Funktion writefile(), die als Argumente die Variable mit den Zeilen sowie die Anzahl der Zeilen übergeben bekommt:
function writefile() { local Array=$1 for ((i=0; i<${!2}; i++)); do eval echo "\${$Array[$i]}" done }
Angenommen, obige Funktionen stünden in einer Datei mit dem Namen filehandling.sh, dann könnte in einem Programm so vorgegangen werden:
#!/bin/sh # Laden der "Bibliotheksdatei" . filehandling.sh # Datei einlesen readfile zu_bearbeitende_Datei FeldVariable Anzahl # Inhalt bearbeiten for ((i=0; i<$Anzahl; i++)); do # Bearbeiten von FeldVariable[$i]... done # Datei schreiben writefile FeldVariable Anzahl > zu_bearbeitende_Datei
Quelle: LinWiki, zu finden unter http://www.de.linwiki.org/wiki/Linuxfibel_-_Shells_-_Bashprogrammierung
Stand: 05.11.2009
EOF