2016-05-06 15 views
0

Ich versuche, einfache Skript mit dem Namen test.sh, die echo die Zahlen in aufsteigender Weise ausgeführt werden. Aber irgendwie zeigt es Fehler. Fehler: While-Schleife in Bash-Shell-Skript

#!/bin/bash 

clear 
a= 0 

while [ $a <= 5 ]; 
do 
    echo $a 
    a=$((a+1)) 
done 

Fehler:

./test.sh: line 4: 0: command not found 
./test.sh: line 6: =: No such file or directory 
+0

@ abhi1610, Sie nehmen "a" als Zähler, aber erhöhen "n" !!! huhhhh – monk

+0

@anubhava Vielen Dank für Ihre Informationen über den Link. Bei Ihrer Antwort würden Sie nur die Zahlen drucken, die nicht iteriert werden. Ich möchte über die While-Schleife iterieren. – abhi1610

+0

@monk Vielen Dank, dass Sie den Tippfehler bemerkt haben. – abhi1610

Antwort

1

Way besser bereits von Anubhava erwähnt wird, jedoch ist diese richtige Version Ihrer Antwort.

#!/bin/bash 

clear 
a=0 

while [[ "$a" -lt 5 ]]; 
do 
    echo $a 
    a=$(($a+1)) 
done 
+0

Danke für die Antwort. Für die Neugierde können Sie beschreiben, warum wir '<=' statt '-lt' nicht verwenden können? – abhi1610

+0

Es ist für Ganzzahlvergleich – monk

+0

Sie können '<=' verwenden, wenn Sie die arithmetische Anweisung verwenden: 'while ((a <= 5)); mach es. 'bash' hat keine Datentypen (alle Werte sind Zeichenketten), daher benötigen Sie spezielle Befehle und Operatoren, um anzugeben, ob Sie Zeichenkettenoperationen ausführen oder die Zeichenketten als ganze Zahlen behandeln wollen. – chepner

1

Das erste Problem mit Ihrem Code ist a= 0, Leerzeichen sind nicht erlaubt (vor oder nach =) in Zuordnung.

zweitens, dieser Teil [ $a <= 5 ]. Sie müssen -lt anstelle von <= hier verwenden.

Wie Sie bereits vertraut mit dem Konstrukt (()) sind, werde ich Ihnen empfehlen, stattdessen zu verwenden, die Sie ganze Zahlen mit <=, >= usw. vergleichen lassen ..

Ihr Code mit der obigen Änderung:

#!/bin/bash 

clear 
a=0 

while (($a <= 5)); 
do 
    echo $a 
    a=$((a+1)) 
done 
+1

Danke für die beschreibende Antwort. – abhi1610