bash-programmierungsfrage

dettus

Bicycle User
hey ihr geeks!

ich hab nen mittelgrosses problem mit meinem shellskript:
an einer stelle habe ich da so einen aufruf drinne:

for I in `cat bla.txt`
do
...
done

(bla.txt ist einfach nur eine datei mit mehreren anweisungen)
eigentlich wuerde ich es ganz gerne haben, dass das skript die datei bla.txt ZEILENWEISE bearbeitet. leider versteht die for-anweisung auch jedes space in bla.txt als einen neuen schritt.
irgendwer ne idee?
 
nimm awk oder benutze 'read'.

ein gutes Buch über Shellskript-Programmierung währe "Shellskript Programmierung" von Patrik Dietchen oder wie er hieß bzw. 'Einstieg in Linux' , dort haben wir ein großes Shellkapitel drin.
 
dettus schrieb:
hey ihr geeks!

ich hab nen mittelgrosses problem mit meinem shellskript:
an einer stelle habe ich da so einen aufruf drinne:

for I in `cat bla.txt`
do
...
done

(bla.txt ist einfach nur eine datei mit mehreren anweisungen)
eigentlich wuerde ich es ganz gerne haben, dass das skript die datei bla.txt ZEILENWEISE bearbeitet. leider versteht die for-anweisung auch jedes space in bla.txt als einen neuen schritt.
irgendwer ne idee?

man bash => IFS

IFS The Internal Field Separator that is used for word splitting
after expansion and to split lines into words with the read
builtin command. The default value is ``<space><tab><new-
line>''.

Hoffe das hilft
 
wie schon gesagt, read + while hilft weiter ..
Code:
cat bla.txt | while read LINE
do
done
oder
Code:
while read LINE
do
done < bla.txt
 
Wenn du es als Liste willst, dann musst du IFS entsprechend setzen

Code:
IFS="
"
for zeile in $(cat file); do
  echo "--> Zeile <--"
done

PS: Ja, das IFS muss genau so geschrieben werden.
 
Zurück
Oben