이 간단한 while 루프 스크립트에 이것을 어떻게 추가합니까?

이 간단한 while 루프 스크립트에 이것을 어떻게 추가합니까?

"아니요, 다시 시도하세요."를 에코하는 간단한 스크립트가 있습니다. 사용자가 "빨간색" 이외의 항목을 입력하면 계속 묻습니다. 사용자가 "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

관련 정보