Tentando criar um programa com loops while aninhados

Tentando criar um programa com loops while aninhados

Resumo do código (ou o que deveria fazer): O usuário recebe uma pergunta, deve inserir um número de participante válido entre 5-20. Em seguida, as perguntas devem ser repetidas com base no número desta entrada (se forem 5 participantes, repita as perguntas sobre nome e país 5 vezes). Se o nome tiver mais de 10 caracteres ou o país não for a Itália, uma mensagem de aviso deverá aparecer solicitando ao usuário que repita a pergunta corretamente. Depois que o requerente tiver inserido as informações corretas, as informações de nome e país deverão ser enviadas para um arquivo externo. Isto deve repetir-se para cada candidato.

Tentei implementar um loop para os valores de nome e país, mas eles parecem fazer um loop infinito ou, quando um dos valores está incorreto, o loop continua. Acho que isso tem algo a ver com o incremento, mas não sei exatamente o que fazer.

Qualquer dica seria apreciada.

#!/bin/sh

i=0

read -p "Welcome to the lottery program. Please enter a number of participants between 5-20." input

while [ $input -lt 5 ] || [ $input -gt 20 ]
do
    read -rp "Number of people must be 5-20" input
done

while [ $i -lt $input ]
do
    read -p "Enter name(max 10 characters)" name
    read -p "Enter country(only for people outside of Italy)" country

while [ ${#name} -gt 10 ]
do
read -p "The name was too long (over 10 chars). Please re-enter: " name
done

while [ "$country" = "Italy" ]
do
read -p "Italy is not included within the program. Please try again" country
done

while [ ${#name} -le 10 ] && [ "$country" != "Italy" ]
do
echo $name $country >>echo.txt
i=$((i+1))



done
done

echo "The records have been saved $input times"    
    

Responder1

Editado da sua postagem das últimas semanas. Eu acredito que o que aconteceu foi quando você transferiu do seu script Linux,talvezvocê bagunçou algum espaçamento. Vou digitar tudo, espero que você possa aprender! sinta-se à vontade para me fazer perguntas, se necessário. E lembre-se novamente, escreva qual erro você está enfrentando, como o código de erro exato do terminal!

#!/bin/sh
 
i=0
        
echo -e "Please enter a number of participants between 5-20 :\c"
read input
        
while [ $input -lt 5 ] || [ $input -gt 20 ]
do
read -rp "Number of people must be 5-20" input
done
        
while [ $i -lt $input ]
do
read -p "Enter name(max 10 characters) :" name
read -p "Enter country(only for people outside of Italy) :" country
        
if [ ${#name} -le 10 ] && [ "$country" != "italy" ]
then
i=$((i+1))
echo $name $country >> echoed.txt
elif [ ${#name} -gt 10 ]
then
read -rp "your name is too long! re-enter!"
else 
echo "Italy isnt accpeted"
fi
done
echo "All $input records are saved!"

informação relacionada