- Seu comando
read
está errado, deve serread string1
(e você deve usar-r
para evitar queread
manche barras invertidas:read -r string1
); - O teste também está errado, deve ser
if grep -q $string1 file.txt
, pois você não está avaliando a saída degrep
, mas sim seu valor de retorno; - Você deve passar a opção
-F
paragrep
para evitar que interprete os metacaracteres de expressões regulares da seguinte forma:if grep -qF $string1 file.txt
- Você deve colocar aspas duplas em
$string1
para impedir uma possível expansão de nome de arquivo e / ou divisão de palavras:if grep -qF "$string" file.txt
Outras notas:
- O
exit 0
no final é redundante e não é realmente necessário, como se o script conseguisse chegar a esse ponto sem erros, retorna0
de qualquer maneira; - O ShellCheck é um recurso muito útil para depurar scripts.
Assim, o script corrigido de acordo com o acima seria:
#!/bin/sh
echo "Enter your sting: "
read string1
if grep -qF "$string1" file.txt;then
echo "Found it"
else
echo "Sorry this string not in file"
fi