入力単語とテキストファイルの単語を比較したいです。
テキストファイルは次のとおりです。
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
コードの流れがどのように見えるのか完全にはわかりませんので、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
ループは正しい推測が行われるまで繰り返される。
2番目の変形:
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
ループはありません。