읽기를 사용하는 무한 while 루프 문제

읽기를 사용하는 무한 while 루프 문제

나는 사용자가 1-10 사이의 숫자를 삽입하도록 요구하는 작은 스크립트를 작성하고 있습니다. 그런 다음 스크립트는 숫자가 요청된 값 사이에 있는지 사용자에게 알려주고 거기에서 계속합니다.

그러나 값이 1보다 작거나 10보다 큰 경우 스크립트를 화면으로 다시 읽으려고 하면 문제가 발생합니다. 스크립트가 실행될 때마다 올바른지 여부에 관계없이 스크립트가 종료되고 "완료" 후 echo 문으로 이동합니다.

사용자가 계속 잘못된 값을 입력하는 경우 "무한 루프"를 생성하려고 합니다.

"완료" 뒤의 에코 문은 내 스크립트의 두 번째 부분이지만 내가 문제를 겪고 있는 부분은 아닙니다.

당신이 제공할 수 있는 도움에 감사드립니다.

스크립트:

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."

답변1

나는 다음과 같이 쓸 것입니다 :

min=1 max=10
until
  printf "Please type a number between $min-$max: "
  IFS= read -r insertnum
  [ "$insertnum" -ge "$min" ] && [ "$insertnum" -le "$max" ]
do
  echo "Your number is not between $min-$max."
done
echo "Your answer is between $min-$max"
echo
echo "We will now do a countdown from $insertnum to 0 using a for loop."

답변2

이것은 작동합니다:

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."

최소한 사용자에게 숫자를 묻는 쉘 함수를 사용하겠습니다. 사용자가 유효한 범위를 벗어난 숫자를 입력하면 이 코드가 여러 번 실행되기 때문입니다. 프로그래밍 진언: 반복하지 마세요.

답변3

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."

답변4

더 짧은 스크립트:

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."

관련 정보