나는 사용자가 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."