![erro ao usar o loop while no script shell do Ubuntu](https://rvso.com/image/192247/erro%20ao%20usar%20o%20loop%20while%20no%20script%20shell%20do%20Ubuntu.png)
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 == 0
então[ $a -lt 10 ]
é verdade - entramos no loop e executamos
a=$(a + 1)
- porque isso éSubstituição de comandonãoExpansão Aritmética, A concha
- tenta executar o programa
a
com argumentos+
e1
- o
a: command not found
erro é lançado - o stdout da substituição do comando é atribuído à variável
a
: esta é uma string vazia
- tenta executar o programa
- voltamos e testamos a condição novamente
- porque
$a
é uma string vazia e porque estamos usando[
not[[
e porque$a
não está entre aspas, o shell vê isto:[ -lt 10 ]
-lt
não é um operador unário (vejaotest
comandoeExpressões condicionais Bash), e a mensagem de erro é lançada[
sai com um status diferente de zero, entãowhile
para o loop.
- porque
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