erro ao usar o loop while no script shell do Ubuntu

erro ao usar o loop while no script shell do Ubuntu

Eu sou novo em scripts de shell e estou tentando aprender o loop while em um script de shell do Ubuntu. 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

A saída é -

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:~$ 

Não tenho ideia de qual é o erro. Alguém por favor me ajude com o problema.

Responder1

Isto é o que está acontecendo:

  • a primeira vez através do loop while, a == 0então [ $a -lt 10 ]é verdade
  • entramos no loop e executamosa=$(a + 1)
  • porque isso éSubstituição de comandonãoExpansão Aritmética, A concha
    • tenta executar o programa acom argumentos +e1
    • o a: command not founderro é lançado
    • o stdout da substituição do comando é atribuído à variável a: esta é uma string vazia
  • voltamos e testamos a condição novamente
    • porque $aé uma string vazia e porque estamos usando [not [[e porque $anão está entre aspas, o shell vê isto:[ -lt 10 ]
    • -ltnão é um operador unário (vejao testcomandoeExpressões condicionais Bash), e a mensagem de erro é lançada
    • [sai com um status diferente de zero, então whilepara o loop.

Responder2

Embora a comparação precise mudar e atribuição de uma variável

#!/bin/bash
echo while loop
a=0
while [[ $a -lt 10 ]]
do
echo $a
a=$(($a+1))
done

informação relacionada