como comparar a entrada do tempo de execução com o arquivo de texto

0

Eu quero comparar a entrada e a palavra do arquivo de texto.

O arquivo de texto tem:

one 
two
three

Entrada de tempo de execução atribuída a uma variável 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

Eu tentei acima do código no meu script, mas não está funcionando.

    
por Kannan M 30.07.2018 / 08:47

1 resposta

0

Não sei ao certo como o fluxo deve ficar no seu código, por isso darei duas versões:

  1. O usuário adivinha até adivinhar corretamente a palavra atual no arquivo, depois passa para adivinhar a segunda palavra e assim por diante.

  2. O usuário adivinha a palavra atual e passa para a próxima, independentemente de a suposição estar correta ou não.

A primeira variação:

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<&-

Não podemos apenas read dentro do loop, pois isso seria lido no arquivo . Em vez disso, lemos do filedescriptor 3, que é uma cópia da entrada padrão feita antes do loop. Após o loop, esse filedescriptor é fechado.

O loop while interno itera até que uma estimativa correta seja feita.

A segunda variação:

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<&-

Isso é semelhante ao código anterior, mas sem o loop while interno.

    
por 05.08.2018 / 11:28