PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeile aus Datei auslesen und weiteres...



anzarr
30-05-2004, 15:06
Einen wunderschönen Sonntag wünsche ich erstmal

//Edit: Vergesslichkeit lässt grüßen: es soll mal ein shell-skript werden

Als blutiger Skript-Anfänger habe ich so einige Probleme, wobei mir auch die manpages (zumindest nicht die, die ich besucht habe) weiterhelfen konnten. Daher einige Fragen, die sich wahrschreinlich recht einfach beantworten lassen:

Ich habe eine Datei mit find erstellt, also pro Zeile eine Pfadangabe. Nun möchte ich mir die erste nehmen, mit basename (oder auch anders) auf den letztren Teil (nach dem letzten / eben) kürzen und weiterarbeiten).

Da werde ich dann erstmal selber schauen, ob ich das gebacken bekomme, bevor ich weiter frage.

Zweitens möchte ich dieses Ganze für jede Zeile, also für jede Pfadangabe, in diesem Fall übrigens nur Ordner,
wiederholen.

Schonmal Danke für Antworten...

MfG
anzarr

peschmae
30-05-2004, 16:07
dazu brauchst du eine foreach-Schleife:



#!/bin/bash
for f in $(cat datei.txt); do
echo Pfad: $f Basename: $(basename "$f");
done


Falls du ein wenig englisch kannst ist folgende Doku imo sehr gut geeignet um Sachen nachzuschlagen:
http://www.tldp.org/LDP/abs/html/

MfG Peschmä

anzarr
30-05-2004, 17:49
Schonmal vielen danke für die Antwort.

Leider habe ich noch Probleme, da die Pfadangaben Leerzeichen enthalten und somit Ordnernamen nicht zusammenhängend verarbeitet werden.

MfG
anzarr

peschmae
30-05-2004, 18:55
das macht in Bash-Scripts gewissermassen immer Probleme.



#!/bin/bash
for f in "$(cat datei.txt)"; do
echo Pfad: $f Basename: $(basename "$f");
done


geht leider nicht, weil so die For-Schleife den Gesamten-Dateiinhalt als ein "f" erhält und nur einmal durchlaufen wird.

Was allerdings funktioniert ist, vor der Schleife die Variable IFS auf einen Zeilenumbruch zu setzen:


IFS="
"


Das zwischen den " " kommt in die Variable - in dem Fall der Zeilenumbruch. IFS beeinflusst die Whitespace-Behandlung der Bash: http://www.tldp.org/LDP/abs/html/internalvariables.html#IFSH

MfG Peschmä

peschmae
30-05-2004, 20:34
es heisst for, aber es ist for-each, oder?
d.h. das Bash-For kann sich sowohl wie ein for-each (for f in 1 2 3 4 5; do echo $f; done) als auch wie ein "normales" for (for ((i = 1; i < 5; i++)); echo $i; done) verhalten.

MfG Peschmä

anzarr
30-05-2004, 21:01
Herzlichen Dank,
mit IFS gehts!

MfG
anzarr