입력 단어와 텍스트 파일 단어를 비교하고 싶습니다.
텍스트 파일은 다음과 같습니다.
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
코드의 흐름이 어떤 모습이어야 할지 완전히 확신할 수 없으므로 두 가지 버전을 제공하겠습니다.
사용자는 파일의 현재 단어를 정확하게 추측할 때까지 추측한 다음 두 번째 단어를 계속 추측하는 식으로 진행됩니다.
사용자는 현재 단어를 추측한 후 추측이 맞는지 여부에 관계없이 다음 단어로 이동합니다.
첫 번째 변형:
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
루프가 없습니다.