tratar
if ! grep -q sysa /etc/passwd ; then
grep
vuelve true
si encuentra el objetivo de búsqueda y false
si no lo hace.
Así que NO false
== true
.
if
La evaluación en shells está diseñada para ser muy flexible, y muchas veces no requiere cadenas de comandos (como usted ha escrito).
Además, mirando su código como está, su uso de la forma $(...)
de la sustitución de cmd es encomiable, pero piense en lo que está saliendo del proceso. Pruebe echo $(cat /etc/passwd | grep "sysa")
para ver lo que quiero decir. Puede llevar eso más allá al usar la opción -c
(conteo) para grep y luego hacer if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
, que funciona, pero es más bien de la vieja escuela.
PERO, puede utilizar las características más nuevas de concha (evaluación aritmética) como
if ! (($(grep -c "sysa" /etc/passwd) == 0)) ; then ...`
que también le da la ventaja de utilizar los operadores de comparación basados c-Lang, ==,<,>,>=,<=,%
y tal vez algunos otros.
En este caso, por un comentario de Orwellophile, la evaluación aritmética puede ser recortado aún más, como
if ! (($(grep -c "sysa" /etc/passwd))) ; then ....
O
if ((! $(grep -c "sysa" /etc/passwd))) ; then ....
Por último, hay un premio llamado Useless Use of Cat (UUOC)
. :-) Algunas personas saltan hacia arriba y hacia abajo y lloran gothca! Solo diré que grep
puede tomar un nombre de archivo en su línea de cmd, entonces, ¿por qué invocar procesos extra y construcciones de tubería cuando no es necesario? ;-)
Espero que esto ayude.
¿Debería el '!' No estar dentro de los corchetes? es decir ''! EXPR] ' – acraig5075
@ acraig5075 es válido de cualquier manera, pero no hay necesidad de un comando de prueba (que es lo que son los corchetes) en esta declaración en absoluto. –