"아니요, 다시 시도하세요."를 에코하는 간단한 스크립트가 있습니다. 사용자가 "빨간색" 이외의 항목을 입력하면 계속 묻습니다. 사용자가 "red"를 입력한 다음 중지하는 경우 "맞습니다!"를 에코하도록 스크립트에 어떻게 추가합니까?
echo -n "What is my favorite color? "
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done
답변1
사용자가 문자열을 입력하면 루프가 어떻게 끝나는지 확인하세요 red
. 즉, 루프가 끝나면 $favorite
루프가 있을 것입니다 red
(또는 사용자가 누르면 Ctrl+D비어 $favorite
있을 것입니다).
따라서 코드에 적용할 수 있는 가장 간단한 변경(사용자가 루프를 종료하는 데 사용할 수 있다는 점을 무시 Ctrl+D)은 스크립트 끝에 문자열을 출력하는 것입니다.
#!/bin/sh
printf 'What is my favorite color? ' >&2
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done
echo "That's right!"
또한 echo -n
이를 취소하고 printf
표준 오류(예: 프롬프트가 인쇄되어야 함)를 추가로 인쇄하는 보다 표준적인 호출로 대체했습니다. 를 사용하면 사용자에게 질문을 던지고 색상을 한 번에 읽을 bash
수 있습니다.read -p 'Enter color: ' color
문제를 올바르게 해결하려면 일반적인 방법으로 입력 유효성 검사 루프를 수행하십시오.
#!/bin/sh
while true; do
printf 'Enter color: ' >&2
read color
if [ "$color" = "red" ]; then
break
fi
echo 'Nope, try again'
done
echo "That's correct!"
이제 루프는 무한하며 명령문으로만 종료됩니다 break
. 이렇게 하면 사용자가 루프에서 벗어나는 것을 방지 Ctrl+D하고 올바른 입력을 입력해야 합니다. 입장 후잘못된입력하는 동안 사용자에게 색상을 입력하라는 메시지가 다시 표시됩니다.
$color
이는 루프 후에 red
.
답변2
논리를 while 루프에 넣어야 합니다.
while true; do
echo -n "What is my favorite color? "
read favorite
if [[ $favorite == "red" ]]; then
echo "That's Right"
exit 0
fi
echo "No, try again."
done