ランタイム入力をテキストファイルと比較する方法

ランタイム入力をテキストファイルと比較する方法

入力単語とテキストファイルの単語を比較したいです。

テキストファイルは次のとおりです。

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つのバージョンを提供します。

  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ループはありません。

関連情報