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