Você precisa usar um $
para expandir uma variável no bash, a menos que esteja dentro de (( ))
. Você está comparando a string literal "num" com o número 0. Use um dos seguintes:
while [ "$num" -ge 0 ] # POSIX
while (( num >= 0 )); # bash
Tentativa de loop uma frase inserida pelo usuário uma quantidade definida de vezes que também é inserida pelo usuário. Continue recebendo a expressão de erro inteiro esperada, e não consigo descobrir como corrigi-lo.
#!/bin/sh
echo "What do you want to say?"
read phrase
echo "How many times?"
read num
while [ "num" -ge 0 ]
do
echo $phrase
num='expr num - 1'
done
Você precisa usar um $
para expandir uma variável no bash, a menos que esteja dentro de (( ))
. Você está comparando a string literal "num" com o número 0. Use um dos seguintes:
while [ "$num" -ge 0 ] # POSIX
while (( num >= 0 )); # bash
Algumas correções.
#!/bin/sh
echo "What do you want to say?"
read phrase
echo "How many times?"
read num
while [ $num -gt 0 ];
do
echo $phrase
let num='num - 1'
done
$ ./cmd.bash
What do you want to say?
hi
How many times?
4
hi
hi
hi
hi
Você pode tornar o recálculo de $num
um pouco mais simplificado e mais fácil de ler com essa notação.
Altere esta linha:
let num='num - 1'
com isso:
( num-- ))
É confuso quando usar ou não a notação $
para variáveis, geralmente você vai querer consultar a página de manual para bash
e test
ao fazer este tipo de trabalho. Esta mudança é apropriada se você estiver usando bash
e não apenas nativo sh
.
$num
ao executar a verificação de limites na seção de controle while
loops. let
em vez de expr
. -ge
, o que lhe dará mais 1 do que você deseja. Com a verificação de limite de while
loops usando -gt
, você obtém esse resultado:
$ ./cmd.bash
What do you want to say?
hi
How many times?
2
hi
1
hi
0
Se você usar seu -ge
, verá este comportamento:
$ ./cmd.bash
What do you want to say?
hi
How many times?
2
hi
1
hi
0
hi
-1