如何将运行时输入与文本文件进行比较

如何将运行时输入与文本文件进行比较

我想比较输入和文本文件单词。

文本文件有:

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循环。

相关内容