我想比较输入和文本文件单词。
文本文件有:
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
循环。