Datei zeilenweise einlesen und strings ausgeben

Delacroix

Cadet 4th Year
Dabei seit
Mai 2012
Beiträge
71
Hallo Leute,
ich bin jetzt nicht so vertraut mit Linux und der Shellprogrammierung.

Vielleicht könnt ihr mir weiterhelfen... ?

Ich habe eine Textdatei in der eine Liste mit Dateinamen ist (aber ohne endungen).
Nun will ich diese Datei einlesen und das ganze in der shell ausgeben. Es soll aber vor und nach dem dateinamen noch extra string dazu kommen.

Folgender Code:

PHP:
while read line; 
do 
	echo "/media/" . $line "/" . $line . "\.iso" ;
done < liste.txt
aber was ich ausgegeben bekomme sieht folgendermaßen aus:

Code:
 . \.isoDateiname
ich kapier nich wieso?
Er verschluckt das "/media/" und stellt \.iso voran und schreibt direkt dahinter den inhalt aus der textdatei.


Hoffe mir kann jemand weiterhelfen ;-)
 

Tumbleweed

Captain
Dabei seit
März 2008
Beiträge
3.556
Code:
#!/bin/bash

while read line; do
        echo "/media/$line/$line.iso"
done < $1
P.S.: $1 ist der erste Parameter, den du bei Aufruf des Scripts angibst. Kannst du auch hart da reinschreiben, wie in deinem Beispiel.
 
Zuletzt bearbeitet:

Mickey Mouse

Rear Admiral
Dabei seit
Aug. 2006
Beiträge
5.411

Delacroix

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2012
Beiträge
71
@tumbleweed:
dein codeschnipsel ist leider genau meine ausgangssituation gewesen... da kommt der mist raus, dass er mir die vordere zeichenkette komplett verschluckt und ".iso" dann an den anfang des strings setzt (die ersten in der variable $line überschreibt ).

@mickey mouse:
vielleicht check ich ja nur nicht so ganz wie man den verwendet, aber wenn ich den so kopier wie du es gepostet hast, dann funzt es jedenfalls nicht...

bzw. wenn ich es 1:1 kopiere, dann heißt es "unterminated quoted string"

ps: das system ist ein ubuntu server 13.04
 
Zuletzt bearbeitet:

Tumbleweed

Captain
Dabei seit
März 2008
Beiträge
3.556
Dann machst du grundlegend etwas falsch bzw. führst nicht meinen Code aus.
Code:
tumble@milkshake-linux:~/scripts$ cat fileToPrint.txt 
a
b
c
d
e
f
g
tumble@milkshake-linux:~/scripts$ ./filePrinter.sh fileToPrint.txt 
/media/a/a.iso
/media/b/b.iso
/media/c/c.iso
/media/d/d.iso
/media/e/e.iso
/media/f/f.iso
/media/g/g.iso
tumble@milkshake-linux:~/scripts$ cat filePrinter.sh 
#!/bin/bash

while read line; do
    echo "/media/$line/$line.iso"
done < $1
Der output kommt von einem Xubuntu 13.04 (64 bit) mit GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu).

Vielleicht habe ich deine Ausgangslage auch falsch verstanden und deine "fileToPrint.txt" enthält etwas anderes.
 
Zuletzt bearbeitet:

Delacroix

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2012
Beiträge
71
hier mal der output wenn ich genau das gleiche tue wie du Tumbleweed:

Code:
Delacroix@UBUNTU-SERVER:~$ cat /media/FILME/DVD/liste.txt 

Traumschiff Surprise - Periode 1
New York Für Anfänger

Delacroix@UBUNTU-SERVER:~$ cat dvd-zu-mkv.sh

#!/bin/bash

while read datei; do
	echo "/media/$datei/$datei.iso"
done < $1

Delacroix@UBUNTU-SERVER:~$ ./dvd-zu-mkv.sh /media/FILME/DVD/liste.txt

/media//.iso
/media//.iso
wo mein grundsätzliches problem liegt, würd ich auch gerne wissen *haarerauf*

eigentlich müsste es ja funktionieren...

die ausgangssituation war:

Code:
Delacroix@UBUNTU-SERVER:~$ cat dvd-zu-mkv2.sh 

#!/bin/bash

while read pfad
do
      echo "/media/FILME/DVD/$pfad/$pfad.iso"
done < /media/FILME/DVD/liste.txt

Delacroix@UBUNTU-SERVER:~$ sh dvd-zu-mkv2.sh 

.isoumschiff Surprise - Periode 1rise - Periode 1
.iso York Für Anfängerork Für Anfänger
 

Tumbleweed

Captain
Dabei seit
März 2008
Beiträge
3.556
Kann ich mir nur mit seltsamen unsichtbaren characters in der Datei erklären, also sowas wie line breaks, carriage returns usw. Wurde die Datei von einem Windows/Mac geschrieben?

Habe deine Datei mal nachgebaut und output ist
/media//.iso
/media/Traumschiff Surprise - Periode 1/Traumschiff Surprise - Periode 1.iso
/media/New York Für Anfänger/New York Für Anfänger.iso
/media//.iso
Für die Leerzeilen müsste man entsprechend skippen, aber das erklärt noch nicht, warum die anderen Zeilen bei dir nicht funktionieren. Bau mal mit vim oder nano eine ähnliche Datei und probiere es aus.
 

Delacroix

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2012
Beiträge
71
hab ich grade ne neue datei gemacht mit dem inhalt "eins zwei drei vier" (mit nano)

resultat je nach "version" des scripts

.isosa/FILME/DVD/eins
.isoia/FILME/DVD/zwei
.isoia/FILME/DVD/drei
.isora/FILME/DVD/vier

oder

deine version

/media//.iso
/media//.iso
/media//.iso
/media//.iso
 

HDScratcher

Lieutenant
Dabei seit
Aug. 2011
Beiträge
1.004
Die Ausgabe mit "/media//.iso" kann ich nicht nachstellen.
Die andere schon, wenn mit nano im DOS-Format (CR/LF) gespeichert wird.
Wie Tumbleweed schon vermutet hat ist das Carriage Return ist dann die Ursache.

Hast Du beim Speichern mit nano von liste.txt dieses Bild (beachte das rot Unterstrichene)?
nano.png
Wenn Ja, drücke mal die Tasten-Kombi ALT+D, damit das "[DOS Format]" verschwindet und bestätige dann mit ENTER.
Es sollte beim speichern weder "DOS Format" noch "MAC Format" dort stehen.

PS:
Die Variante, dass für jede Zeile der Quelle nur "/media//.iso" ausgegeben wird, könnte ich z.Z. nur damit erklären, das der Variablenname beim read und beim echo nicht identisch (auch Groß-/Kleinschreibung) ist.
Im weiter oben geposteten Code ist dieser Fehler aber nicht vorhanden.
Ist der Code evtl. hier für das Forum nochmal leicht angepasst worden?
 
Zuletzt bearbeitet:

Delacroix

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2012
Beiträge
71
hallo HDscratcher,

ja das war tatsächlich die lösung (wenn ich auch nicht in der lage dazu wahr den speichermodus mit Alt-D zu ändern (sondern nur mit nano --noconvert) zu starten.

wer zum teufel denkt sich so einen mist aus, auf den kein normaler mensch kommt, den fehler hätt ich die nächsten 100 jahre nicht gefunden....
 
Top