Usando grep em uma instrução if-else [fechada]

10

Por que meu código não está sendo exibido se uma sequência digitada não está no arquivo. Quando insiro uma string e ela não está no arquivo, não há resposta, ela volta ao início. Alguém pode me dizer o que há de errado com o meu código?

while :
do
echo "Please enter a string"
read input_string
echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
read input_string1
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done
Adam Poyser
fonte
3
O que você está esperando que aconteça?
Patrick
Era para dizer que uma string que você digita, procura-a no arquivo e diz se essa string está presente. Agora percebi que preciso inserir outro código para outra coisa. Obrigado
Adam Poyser
input_stringnão é realmente um nome de variável falando, a propósito :)
Marian
1
Você precisa de aspas duplas em torno de expansões variáveis. Leia Por que meu script de shell engasga com espaços em branco ou outros caracteres especiais?
Gilles 'SO- stop being evil'

Respostas:

10
while :
 do
     echo "Please enter a string"
     read input_string
     echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
     read input_string1
     grep -q "${input_string}" "${input_string1}"                                                                 
     if [ $? -eq 0 ] ; then
         echo  "Your string has been found"
     else 
         echo "Your string has not been found"
     fi
 done
GMaster
fonte
1
Eu apenas tentei esse código e funciona obrigado! Não sabia que todo o meu problema era não ter uma declaração else. Obrigado pela resposta rápida
Adam Poyser
2
Você precisa citar os parâmetros grep. Pense no que aconteceria se minha string de pesquisa incluísse -vou houvesse espaços no nome do arquivo.
Ángel
0

Você descobriu o ramo em falta, mas uma sugestão:

em vez de usar $input_string $input_string1try ${input_string} ${input_string1}apenas para garantir que você não seja $input_stringseguido por 1.

user85015
fonte
Não, a substituição proposta é exatamente equivalente ao original. $input_string1é o valor da variável input_string1(dividida e globbed, pois não está entre aspas), não envolve a variável input_string.
Gilles 'SO- stop be evil'