experimentar
if ! grep -q sysa /etc/passwd ; then
grep
retorna true
se encontrar o alvo de pesquisa e false
se não encontrar.
Então NÃO false
== true
.
if
a avaliação em shells é projetada para ser muito flexível e muitas vezes não requer cadeias de comandos (como você escreveu).
Além disso, olhando seu código como está, seu uso da $( ... )
forma de substituição do cmd deve ser recomendado, mas pense no que está saindo do processo. Tente echo $(cat /etc/passwd | grep "sysa")
ver o que eu quero dizer. Você pode levar isso adiante usando a -c
opção (count) para grep e depois executar o if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
que funciona, mas é bastante antigo.
MAS, você pode usar os recursos mais recentes do shell (avaliação aritmética) como
if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`
o que também oferece o benefício de usar os operadores de comparação baseados em c-lang ==,<,>,>=,<=,%
e talvez alguns outros.
Nesse caso, por um comentário de Orwellophile, a avaliação aritmética pode ser reduzida ainda mais, como
if ! (( $(grep -c "sysa" /etc/passwd) )) ; then ....
OU
if (( ! $(grep -c "sysa" /etc/passwd) )) ; then ....
Finalmente, há um prêmio chamado Useless Use of Cat (UUOC)
. :-) Algumas pessoas vão pular para cima e para baixo e chorar gothca! Vou apenas dizer que grep
pode ter um nome de arquivo em sua linha de cmd, então por que invocar processos e construções de tubulação extras quando você não precisa? ;-)
Eu espero que isso ajude.
!
não deve estar dentro dos colchetes? ie[ ! EXPR ]