런타임 입력을 텍스트 파일과 비교하는 방법

런타임 입력을 텍스트 파일과 비교하는 방법

입력 단어와 텍스트 파일 단어를 비교하고 싶습니다.

텍스트 파일은 다음과 같습니다.

one 
two
three

변수에 할당된 런타임 입력 var:

read -p " enter the value : " var
while read first
do
  a=$first
  if [ "$a" == "$var" ] 
  then 
    echo  " $var is found "
  else
    echo " $var is not found "
    read -p " please enter correct value " $var
  fi
done < word.txt

위의 코드를 스크립트에서 시도했지만 작동하지 않습니다.

답변1

코드의 흐름이 어떤 모습이어야 할지 완전히 확신할 수 없으므로 두 가지 버전을 제공하겠습니다.

  1. 사용자는 파일의 현재 단어를 정확하게 추측할 때까지 추측한 다음 두 번째 단어를 계속 추측하는 식으로 진행됩니다.

  2. 사용자는 현재 단어를 추측한 후 추측이 맞는지 여부에 관계없이 다음 단어로 이동합니다.

첫 번째 변형:

exec 3<&1
n=0
while read word; do
    n=$(( n + 1 ))
    while true; do
        printf 'Word #%d\n' "$n"
        read -p 'guess the word: ' -u 3 guess
        if [ "$guess" = "$word" ]; then
            echo 'correct'
            break
        fi
        echo 'wrong, try again'
    done
done <words
exec 3<&-

read루프 내부를 읽을 수는 없습니다.문서. 대신 루프 이전에 생성된 표준 입력의 복사본인 파일 설명자 3에서 읽습니다. 루프가 끝나면 파일 설명자가 닫힙니다.

내부 while루프는 올바른 추측이 이루어질 때까지 반복됩니다.

두 번째 변형:

exec 3<&1
n=0
while read word; do
    n=$(( n + 1 ))
    printf 'Word #%d\n' "$n"
    read -p 'guess the word: ' -u 3 guess
    if [ "$guess" = "$word" ]; then
        echo 'correct'
    else
        echo 'wrong, next word...'
    fi
done <words
exec 3<&-

이는 이전 코드와 유사하지만 내부 while루프가 없습니다.

관련 정보