provare
if ! grep -q sysa /etc/passwd ; then
grepritorna truese trova il target di ricerca e falsese non lo fa.
Quindi NON false== true.
if la valutazione nelle shell è progettata per essere molto flessibile e molte volte non richiede catene di comandi (come hai scritto).
Inoltre, guardando il tuo codice così com'è, il tuo uso della $( ... )forma di sostituzione cmd deve essere lodato, ma pensa a cosa sta uscendo dal processo. Prova echo $(cat /etc/passwd | grep "sysa")a capire cosa intendo. Puoi andare oltre usando l' -copzione (count) per grep e poi fare if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; thenquale funziona ma è piuttosto vecchia scuola.
MA, potresti usare le più recenti funzionalità di shell (valutazione aritmetica) come
if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`
che offre anche il vantaggio di utilizzare gli operatori di confronto basati su c-lang ==,<,>,>=,<=,%e forse alcuni altri.
In questo caso, per un commento di Orwellophile, la valutazione aritmetica può essere ulteriormente ridotta, come
if ! (( $(grep -c "sysa" /etc/passwd) )) ; then ....
O
if (( ! $(grep -c "sysa" /etc/passwd) )) ; then ....
Infine, c'è un premio chiamato il Useless Use of Cat (UUOC). :-) Alcune persone salteranno su e giù e piangeranno gothca! Dirò solo che greppuò prendere un nome di file sulla sua linea cmd, quindi perché invocare processi extra e costruzioni di pipe quando non è necessario? ;-)
Spero che aiuti.
!non dovrebbe essere all'interno delle parentesi? vale a dire[ ! EXPR ]