![Fehler bei der Verwendung der While-Schleife im Ubuntu-Shell-Skript](https://rvso.com/image/192247/Fehler%20bei%20der%20Verwendung%20der%20While-Schleife%20im%20Ubuntu-Shell-Skript.png)
Ich bin neu im Shell-Scripting und versuche, die While-Schleife in einem Ubuntu-Shell-Script zu lernen. Script.sh
#!/bin/bash
#Initializing two variables
#while loop
echo while loop
a=0
while [ $a -lt 10 ]
do
echo $a
a=$(a + 1)
done
Die Ausgabe ist -
vscoder@vscoder-VirtualBox:~$ ./script.sh
while loop
0
./script.sh: line 10: a: command not found
./script.sh: line 7: [: -lt: unary operator expected
vscoder@vscoder-VirtualBox:~$
Ich habe keine Ahnung, was der Fehler ist. Kann mir bitte jemand bei dem Problem helfen?
Antwort1
Folgendes passiert:
- beim ersten Durchlaufen der while-Schleife ist
a == 0
also[ $a -lt 10 ]
true - wir betreten die Schleife und führen aus
a=$(a + 1)
- denn das istBefehlsersetzungnichtArithmetische Erweiterung, die Muschel
a
versucht, das Programm mit Argumenten auszuführen+
und1
- der
a: command not found
Fehler wird ausgegeben - Die Standardausgabe der Befehlsersetzung wird der Variablen zugewiesen
a
: Dies ist eine leere Zeichenfolge
- Wir kehren zurück und testen den Zustand erneut
- weil
$a
es sich bei „+“ um einen leeren String handelt, wir „+“ verwenden und[
keine Anführungszeichen gesetzt sind, sieht die Shell Folgendes:[[
$a
[ -lt 10 ]
-lt
ist kein unärer Operator (siehedertest
BefehlUndBedingte Ausdrücke in Bash) und die Fehlermeldung wird ausgegeben[
wird mit einem Status ungleich Null beendet undwhile
stoppt so die Schleife.
- weil
Antwort2
Während des Vergleichs muss eine Variable geändert und zugewiesen werden
#!/bin/bash
echo while loop
a=0
while [[ $a -lt 10 ]]
do
echo $a
a=$(($a+1))
done