Bash kein Abbruch in while schleife

AMD_Rulez

Lieutenant
Registriert
Feb. 2010
Beiträge
582
Hallo,

Erkennt ihr den Fehler ?

b=.*[Aa]
c=[Aa]
d=[Aa].*[Aa]
e=1
a='grep -c [Aa] 'vornamen''
While [ $a -ne 0 ]
do
Echo " Alle Namen mit $e mal A oder a"
grep $c 'vornamen' | grep -v $d | sort -u
c=$c$b
d=$d$b
e=$(( $e +1 ))
Done



Da ich aufm iPad getippt habe konnte ich bei der variable a am Anfang nicht die schrägen hochkommas setzen.
Wenn ich das Programm ausführe passiert alles zu erst wie es soll. Alle Namen mit einem a aus der Datei vornamen werden ausgegeben dann mit zwei a usw.
Es scheint etwas mit dem Abbruch der Schleife nicht zu stimmen weil Echo "alle namen mit $e ... Weiter ausgegeben wird also der Zähler läuft ins unendliche.
Danke fals jemand eine Lösung hat
 
While [ $a -ne 0 ]

Das testet ob a ungleich 0 ist. Da bash typenlos arbeitet, wird diese Bedingung bei Namen wohl immer zutreffen.

Soweit die Vermutung...

edit:
Sehe grad das -c beim grep. Du zählst also die Zeilen die [Aa] enthalten. Ist also eine Endlosschleife, da Du ja $a hinterher nicht dekrementierst.
Das würd ich mal probieren
 
Zuletzt bearbeitet:
a wird nicht verändert und a ist ein string ;)
While [ $a -z ]
-z überprüft ob ein String die Länge Zero hat

In der Schleife musst du nun noch irgendwie a weiterschalten :)

Edit:
Hab mich geirrt, $a ist doch ne Zahl.
Jedoch wird sie dennoch nicht verändert und somit niemals 0 werden :P
Füg mal hinter
e=$(( $e +1 ))

ein
a=$(( $a - 1 )) ein ;)
 
Zuletzt bearbeitet:
Ne, a ist die Anzahl der Zeilen. Das -c beim grep zählt die Zeilen und gibt den Wert zurück. Also z.B. 5 Zeilen. SOmit ist a=5 (und bleibt es).

Also hinterher dekrementieren, dann ist a irgendwann 0 und dann passt die Bedingung und die Schleife sollte aufhören
 
Also das dekrementieren mit a=$(( $a - 1 )) hat nicht funktioniert
Ergänzung ()

Bzw. Es geht nur noch bis 399. Und es gibt 399 Zeilen mit mindestens einem a drin. Was heust das?
 
DarthSpot schrieb:
a wird nicht verändert und a ist ein string ;)
While [ $a -z ]
-z überprüft ob ein String die Länge Zero hat

Es muss [-z "$a"] heißen, nicht umgekehrt!

Bei der Schleife fehlt aber auf jeden Fall der Zähler. Du prüfst zwar bei jedem Durchlauf auf $a != 0, aber a ändert sich _nie_ -> d.h. Bedingung ist _immer_ erfüllt!
 
Zuletzt bearbeitet:
Zurück
Oben