error al usar el bucle while en el script de shell de ubuntu

error al usar el bucle while en el script de shell de ubuntu

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 == 0también [ $a -lt 10 ]es cierto
  • entramos al bucle y ejecutamosa=$(a + 1)
  • porque esto esSustitución de comandonoExpansión aritmética, la cáscara
    • intenta ejecutar el programa acon argumentos +y1
    • a: command not foundse 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
  • retrocedemos y probamos la condición nuevamente
    • porque $aes una cadena vacía, y porque estamos usando [not [[y porque $ano está entre comillas, el shell ve esto:[ -lt 10 ]
    • -ltno es un operador unario (verEl testcomandoyExpresiones condicionales de bash), y se lanza el mensaje de error
    • [sale con un estado distinto de cero, por lo que whiledeja de repetirse.

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

información relacionada