Intentando crear un programa con bucles while anidados

Intentando crear un programa con bucles while anidados

Resumen del código (o lo que debería hacer): el usuario recibe una pregunta, el usuario debe ingresar un número de participante válido entre 5 y 20. Luego, las preguntas deben repetirse según el número de estos aportes (si hay 5 participantes, repita las preguntas sobre el nombre y el país 5 veces). Si el nombre tiene más de 10 caracteres o el país no es Italia, debería aparecer un mensaje de advertencia para pedirle al usuario que repita la pregunta correctamente. Una vez que el solicitante haya ingresado la información correcta, tanto el nombre como el país deben enviarse a un archivo externo. Esto debería repetirse para cada solicitante.

Intenté implementar un bucle para los valores de nombre y país, pero parece que se repiten infinitamente o, cuando uno de los valores es incorrecto, el bucle continúa. Creo que esto tiene algo que ver con el incremento, pero no estoy exactamente seguro de qué hacer.

Se agradecería cualquier consejo.

#!/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"    
    

Respuesta1

Editado de la publicación de las últimas semanas. Creo que lo que sucedió fue cuando transfieres desde tu script de Linux,tal vezarruinaste algunos espacios. Voy a escribir todo, ¡espero que puedas aprender! no dudes en hacerme preguntas si es necesario. Y recuerde nuevamente: escriba el error al que se enfrenta, como el código de error exacto del 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!"

información relacionada