provare
if ! grep -q sysa /etc/passwd ; then
grep
rendimenti true
se trova la destinazione di ricerca, e false
se non lo fa.
Quindi NON false
== true
.
valutazione
if
in gusci sono progettati 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 del modulo $(...)
di sostituzione di cmd deve essere lodato, ma pensa a cosa sta uscendo dal processo. Prova echo $(cat /etc/passwd | grep "sysa")
per vedere cosa intendo. Puoi continuare a utilizzare l'opzione -c
(count) per grep e quindi fare if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
che funziona ma è piuttosto vecchia scuola.
MA, è possibile utilizzare le nuove funzioni di shell (valutazione aritmetica) come
if ! (($(grep -c "sysa" /etc/passwd) == 0)) ; then ...`
che vi dà anche il vantaggio di utilizzare gli operatori di confronto basato c-lang, ==,<,>,>=,<=,%
e forse pochi altri.
In questo caso, per un commento Orwellophile, la valutazione aritmetica possono essere sbucciato ulteriormente verso il basso, come
if ! (($(grep -c "sysa" /etc/passwd))) ; then ....
O
if ((! $(grep -c "sysa" /etc/passwd))) ; then ....
Infine, v'è un premio chiamato Useless Use of Cat (UUOC)
. :-) Alcune persone salteranno su e giù e piangeranno gothca! Dirò semplicemente che grep
può prendere un nome di file sulla sua linea cmd, quindi perché invocare processi e strutture di tubi extra quando non è necessario? ;-)
Spero che questo aiuti.
Il '!' Non deve essere all'interno delle parentesi? Ad esempio "[! EXPR] ' – acraig5075
@ acraig5075 è valido in entrambi i casi, ma non c'è bisogno di un comando di test (che è quello che sono le parentesi) in questa dichiarazione. –