Problema de loop infinito usando leitura

0

Estou escrevendo um pequeno script que pede ao usuário para inserir um número de 1-10. O script informará ao usuário se o número está entre os valores solicitados e continuará de lá.

No entanto, estou tendo um problema ao tentar fazer com que o script seja lido novamente na tela se o valor for menor que 1 ou maior que 10. Sempre que o script for executado, correto ou não, o script será encerrado e vá para a instrução echo depois de "concluído".

Estou tentando criar um "loop infinito" se o usuário continuar inserindo o valor incorreto.

A declaração echo depois de "done" é a segunda parte do meu script, mas essa não é a parte com a qual estou tendo problemas.

Obrigado por qualquer ajuda fornecida.

Script:

echo "Please type a number between 1-10."
read insertnum
while [ "$insertnum" -ge 1 -a "$insertnum" -le 10 ]
 do
    if [ "$insertnum" -ge 1 -a "$insertnum" -le 10 ]
     then
# Prompt the user that their answer is acceptable
     echo "Your answer is between 1-10"
     echo
     break
    else
# Prompt the user that their answer is not acceptable
     echo "Your number is not between 1-10."
     echo
     echo "Please type a number between 1-10."
     read insertnum
     echo
fi
done
echo "We will now do a countdown from $insertnum to 0 using a for loop."
    
por Mister123 25.03.2016 / 19:13

3 respostas

0

Isso deve funcionar:

read -p "Please type a number between 1-10: " insertnum
while true; do
    if [ "$insertnum" -ge 1 ] && [ "$insertnum" -le 10 ];then
        # Prompt the user that their answer is acceptable
        echo "Your answer is between 1-10"
        echo
        break
    else
        # Prompt the user that their answer is not acceptable
        echo "Your number is not between 1-10."
        echo
        read -p "Please type a number between 1-10: " insertnum
    fi
done
echo "We will now do a countdown from $insertnum to 0 using a for loop."

Eu usaria as funções do shell, pelo menos para perguntar o número ao usuário, já que esse código será executado várias vezes se o usuário inserir um dígito fora do intervalo válido ... Mantra de programação: não se repita. / p>     

por 25.03.2016 / 19:32
0
while true ; do
  read -p "Please type a number between 1-10: " insertnum
  if [ "${insertnum}" -ge 1 ] && [ "${insertnum}" -le 10 ]
    then
      echo -e "acceptable answer between 1 and 10\n\n\n"
      break
    else
      echo -e "your answer is unacceptable. It has to be be between 1 and 10\n\n\n"
  fi
done
echo "We will now do a countdown from ${insertnum} to 0 using a for loop."
    
por 25.03.2016 / 19:39
0

Um script mais curto:

unset a
until  [ "$a" = 1 ]
do     read -p "Please type a number between 1-10: " insertnum
       : $(( a=( insertnum > 0 )&( insertnum < 11 ) ))
       printf 'Your number is %.'"$a"'0sbetween 1-10.\n\n' 'not '
done
echo "We will now do a countdown from $insertnum to 0 using a for loop."
    
por 25.03.2016 / 22:59