provare
if ! grep -q sysa /etc/passwd ; then
grep
ritorna true
se trova il target di ricerca e false
se 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' -c
opzione (count) per grep e poi fare if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
quale 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 grep
può 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 ]