![error al usar el bucle while en el script de shell de ubuntu](https://rvso.com/image/192247/error%20al%20usar%20el%20bucle%20while%20en%20el%20script%20de%20shell%20de%20ubuntu.png)
Soy nuevo en los scripts de shell y estoy intentando aprender el bucle while en un script de shell de ubuntu. Guión.sh
#!/bin/bash
#Initializing two variables
#while loop
echo while loop
a=0
while [ $a -lt 10 ]
do
echo $a
a=$(a + 1)
done
La salida es -
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:~$
No tengo idea de cuál es el error. Alguien por favor ayúdeme con el problema.
Respuesta1
Esto es lo que está pasando:
- la primera vez a través del ciclo while,
a == 0
también[ $a -lt 10 ]
es cierto - entramos al bucle y ejecutamos
a=$(a + 1)
- porque esto esSustitución de comandonoExpansión aritmética, la cáscara
- intenta ejecutar el programa
a
con argumentos+
y1
a: command not found
se lanza el error- la salida estándar de la sustitución del comando se asigna a la variable
a
: esta es una cadena vacía
- intenta ejecutar el programa
- retrocedemos y probamos la condición nuevamente
- porque
$a
es una cadena vacía, y porque estamos usando[
not[[
y porque$a
no está entre comillas, el shell ve esto:[ -lt 10 ]
-lt
no es un operador unario (verEltest
comandoyExpresiones condicionales de bash), y se lanza el mensaje de error[
sale con un estado distinto de cero, por lo quewhile
deja de repetirse.
- porque
Respuesta2
Mientras que la comparación necesita cambiar y asignar una variable
#!/bin/bash
echo while loop
a=0
while [[ $a -lt 10 ]]
do
echo $a
a=$(($a+1))
done