Fehler bei der Verwendung der While-Schleife im Ubuntu-Shell-Skript

Fehler bei der Verwendung der While-Schleife im Ubuntu-Shell-Skript

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 == 0also [ $a -lt 10 ]true
  • wir betreten die Schleife und führen ausa=$(a + 1)
  • denn das istBefehlsersetzungnichtArithmetische Erweiterung, die Muschel
    • aversucht, das Programm mit Argumenten auszuführen +und1
    • der a: command not foundFehler 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 $aes sich bei „+“ um einen leeren String handelt, wir „+“ verwenden und [keine Anführungszeichen gesetzt sind, sieht die Shell Folgendes:[[$a[ -lt 10 ]
    • -ltist kein unärer Operator (sieheder testBefehlUndBedingte Ausdrücke in Bash) und die Fehlermeldung wird ausgegeben
    • [wird mit einem Status ungleich Null beendet und whilestoppt so die Schleife.

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

verwandte Informationen