ola
as expressoes abaixo sao equivalentes
tpeczenyj@CPL-tpeczenyj:~$ seq 10
1
2
3
4
5
6
7
8
9
10
tpeczenyj@CPL-tpeczenyj:~$ seq 10 > x
tpeczenyj@CPL-tpeczenyj:~$ grep -q 4 x && echo contem 4 || echo nao contem 4
contem 4
tpeczenyj@CPL-tpeczenyj:~$ if grep -q 4 x ; then echo contem 4 ; else echo nao contem 4 ; fi
contem 4
vamos entender
grep eh um binario executavel
grep com opcao -q (quiet) retorna erro pro sistema operacional ( $? diferente de zero)
o && e || no shell verificam esse retorno do comando para saber o q executar
if then else fi tambem utiliza esse conceito
entretanto o comando test e seu alias [[ nao interpreta isso como 'execute o comando' e sim como expressoes proprias (compara strings, numeros, etc), vc nao vai conseguir utilizar o test desse jeito. vc poderia fazer
tpeczenyj@CPL-tpeczenyj:~$ grep -q 4 x
tpeczenyj@CPL-tpeczenyj:~$ RETORNO=$?
tpeczenyj@CPL-tpeczenyj:~$ echo $RETORNO
0
tpeczenyj@CPL-tpeczenyj:~$ grep -q 66 x
tpeczenyj@CPL-tpeczenyj:~$ RETORNO=$?
tpeczenyj@CPL-tpeczenyj:~$ echo $RETORNO
1
e verificar o valor dessa variavel com o operador -eq por exemplo
ficou claro?
abracos