Respostas:
Qualquer versão compatível com POSIXgrep
possui o comutador -q
para silêncio:
-q
Quiet. Nothing shall be written to the standard output, regardless
of matching lines. Exit with zero status if an input line is selected.
No GNU grep (e possivelmente em outros), você também pode usar sinônimos de opções longas:
-q, --quiet, --silent suppress all normal output
Existe uma string:
$ echo "here" | grep -q "here"
$ echo $?
0
String não existe:
$ echo "here" | grep -q "not here"
$ echo $?
1
Você só precisa combinar grep -q <pattern>
com uma verificação imediata do código de saída para o último processo sair ( $?
).
Você pode usar isso para criar um comando como este, por exemplo:
uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac
Você pode opcionalmente suprimir a saída da seguinte STDERR
maneira:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
Isso será impresso a error: 2
partir da case
instrução (assumindo que não temos privilégios para ler /etc/shadow
ou que o arquivo não existe), mas a mensagem de erro de grep
será redirecionada para, /dev/null
para que nunca a vejamos.
echo $?
segrep
retornar um código de saída diferente de zero.