Tengo un script bash con lo siguiente:
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
Este script no se ejecutará sin el -e. ¿Qué hace el -e
para este script? Además, ¿qué hace el $?
en este contexto?
-e
en la página de manual (realmente quiero ver una respuesta a esto).$?
contiene el último código de salida (el delegrep
proceso generado anteriormente).-e
se documenta enset
.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
if
y[
. Este script no funcionará con-e
, porque sigrep
no encuentra nada entonces bajo-e
el guión terminará ahí. Sin-e
, tienes el mensaje al revés: un estado ($?
) de 0 significa que grep encontró al usuario. Tenga en cuenta que esto debería ser `grep '^ username:', por cierto (¿qué pasa si hay otro usuario con un nombre más largo?).#/bin/bash -e
el mismo efecto que#/bin/bash
en la línea 1 yset -e
en la línea 2?Respuestas:
Error al salir. Más banderas
Si hay un error, saldrá de inmediato.
El $? es el estado de salida del comando pasado. En Linux, un estado de salida de 0 significa que el comando fue exitoso. Cualquier otro estado significaría que ocurrió un error.
egrep "^ nombre de usuario" / etc / passwd> / dev / null Buscaría el nombre de usuario debajo del archivo / etc / passwd. Si lo encuentra, entonces el estado de salida $? será igual a 0. Si no lo encuentra, el estado de salida será otra cosa (no 0), por lo tanto, "echo no existe".
fuente
if egrep "^username" /etc/passwd >/dev/null
.set
requiere? : - /-e
se da a bash como un argumento de línea de comandos. Todas las opciones enumeradas a continuaciónset
también son aceptadas por bash en su línea de comando: observe la primera oración en la sección Opciones de la página del manual.Todos los modificadores de línea de comando bash están documentados en
man bash
.fuente
set
requiere? : - /Tu guión es incorrecto, porque
estado de salida 0 - significa - todo está bien, en el caso de grep significa "OK, encontró la cadena". estado de salida! = 0 significa que algo está mal, en el caso de grep 1 significa, "no encontrado", 2 significa "no se puede abrir la entrada" ...
fuente