2016-04-07 7 views
-2

Ich versuche, ein Skript zu erstellen, das für eine Liste von Daten in einer Datei loops und eine bestimmte Operation ausführt. Mein Code sieht wie folgt aus. Ich benutze Bash Shell.Während Schleife in Unix-Bash-Shell

while read line; do 
#do something with $line 
done < file.txt 

Bis jetzt habe ich versucht, mein Skript mit 2 Termine zu testen, aber das Skript ausgeführt wird für den ersten Tag, aber nicht die zweite. Außerdem sagt mein Skript, dass es erfolgreich abgeschlossen wurde. Kann mir bitte jemand hier helfen.

Jetzt versuche ich, mein Skript für 4 Termine auszuführen. Ich habe auch gelesen, dass jemand ein ähnliches Problem hat, wo es N Zeilen gibt, aber das Skript funktioniert nur für N-1. Aber ich konnte für diese Frage keine perfekte Antwort finden.

+0

Was ist '$ file.txt'? – karakfa

+0

Die Schleife ist korrekt. Überprüfen Sie mit 'file $ file.txt', dass es keine Windows-Zeilenenden enthält. –

+0

Es gibt offensichtlich keinen Fehler mit dem von Ihnen geposteten Code. Bitte bearbeiten Sie Ihre Frage, um zu zeigen, was Sie innerhalb der Schleife tun und was in der Eingabedatei enthalten ist. – Kenster

Antwort

2

Ich habe es versucht und diese Struktur des Codes ist in Ordnung. Vielleicht ist das Problem innerhalb der Schleife?

[[email protected]]$ cat a.txt 
a 
b 
c 
[[email protected]]$ while read line; do echo $line; done < a.txt 
a 
b 
c 
0

Die letzte Zeile sollte am Ende einen Zeilenumbruch haben. Ich werde eine falsche Datei zeigen:

printf "1\n2" > file.txt 
wc -l file.txt 
1 file.txt 
while read line; do 
> echo $line 
> done < file.txt 
1 

Ist das Ihr Problem? Nur cat file.txt. Wenn sich die letzte Zeile und die Eingabeaufforderung in derselben Zeile befinden, müssen Sie eine neue Zeile an Ihre Datei.txt anhängen (etwa echo >> file.txt).