====== 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