Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Syntax While-Schleife in shell script

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
miki
Gast





BeitragVerfasst am: 24. Mai 2004 8:11   Titel: Syntax While-Schleife in shell script

hi,
ich möchte folgendes in meiner While Schleife ausdrücken

ANZ=3
While [ $ANZ > 0 ]
do
echo $ANZ
ANZ=' expr $ANZ -1`
done

kennt jemand die richtige Syntax für dieses Problem, denn so läuft das leider nicht.
vielen dank im vorraus!
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 24. Mai 2004 8:48   Titel:

Ich gebe mal zwei Varianten zum besten.

Erst mal die sh-Variante. Sie ist immer noch am portablesten.
Code:
#!/bin/sh
ANZ=3
while test $ANZ -gt 0
do
    echo $ANZ
    ANZ=`expr $ANZ - 1`
done


Performanter und m.E. leichter lesbar ist die bash-Variante (die so auch in der ksh funktionieren müsste):
Code:
#!/bin/bash
ANZ=3
while (( ANZ > 0 ))
do
    echo $ANZ
    (( ANZ++ ))        # Oder (( ANZ = ANZ + 1 )), wenn man ++ nicht mag
done


Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

miki
Gast





BeitragVerfasst am: 24. Mai 2004 9:17   Titel:

danke, es funktioniert, aber wofür ist den dieses "while TEST" test ?
 

jwm



Anmeldungsdatum: 27.09.2000
Beiträge: 28

BeitragVerfasst am: 24. Mai 2004 10:19   Titel:

while [] ist das gleiche wie while test, sprich [] steht für den Aufruf von test.

Immer gerne in Linuxkursen gesehen: Nennen sie ihr Script NICHT test!
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 24. Mai 2004 11:03   Titel:

Richtig, die eckige Klammer auf "[" entspricht dem Kommando test. Allerdings verlangt das Kommando unter dem Namen "[", dass als letztes Argument ein "]" folgt. Die while-Schleife reagiert wie auch das if-Statement auf den Exitcode des folgenden Kommandos, daher muss man nicht unbedingt mit irgendweochen expliziten Vergleichen mittels test nach while arbeiten:
Code:
#!/bin/sh
while who | grep -q root ; do
    sleep 60
done
echo "root hat sich abgemeldet!"

Die while-Schleife läuft solange, wie grep "root" im Output von who findet. Sollte "root" nicht zu finden sein, ist der Exitcode von grep gleich 1 und die Ausführung wird nach der while-Schleife fortgesetzt.

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

jwm



Anmeldungsdatum: 27.09.2000
Beiträge: 28

BeitragVerfasst am: 24. Mai 2004 16:27   Titel:

Oder noch generischer (gilt ja auch für if ... etc.): wenn der Exitcode des aufgerufenen Befehls 0 und somit wahr ist gilt die Bedingung als erfüllt.
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy