echo -n "please choose a number: "
read number
until [ $number -eq 50 ]
do
# if [ $number -ne 50 ]
# then
echo "Wrong number; try again"
read number
# fi
done
echo You got it\!
O primeiro read
lê a variável number
. O loop until
faz um loop até $number
ser igual a 50.
O teste dentro do loop é desnecessário, pois o until
só entra quando o número é -ne
(diferente de 50).
O principal problema que você teve foi que read
dentro do loop deve atualizar a mesma variável ( number
) que a construção until
verifica.
O espaçamento também é importante, porque a palavra (cercada por espaço em branco) depois de if
é o nome de um comando. [$number
avalia para o que quer que tenha sido inserido, mas prefixado por '[', que provavelmente não é o nome de um comando existente. Por exemplo, se o primeiro palpite fosse 42
, o comando if
tentaria executar o comando [42
, causando um erro como [42: not found
.
Além disso, a comparação de números é feita com -eq
, -lt
, -ge
, -gt
, -ge
, -ne
.
=
e =!
são para strings.