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 -epara este script? Además, ¿qué hace el $?en este contexto?

-een la página de manual (realmente quiero ver una respuesta a esto).$?contiene el último código de salida (el delegrepproceso generado anteriormente).-ese documenta enset.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fiify[. Este script no funcionará con-e, porque sigrepno encuentra nada entonces bajo-eel 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 -eel mismo efecto que#/bin/bashen la línea 1 yset -een 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.setrequiere? : - /-ese da a bash como un argumento de línea de comandos. Todas las opciones enumeradas a continuaciónsettambié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.-e Salir inmediatamente si una tubería (que puede consistir en un comando simple simple), un comando subshell encerrado en paréntesis, o uno de los comandos ejecutados como parte de Una lista de comandos entre llaves (ver SHELL GRAMMAR arriba) sale con un estado distinto de cero. La cáscara no salir si el comando que falla es parte del comando lista inmediatamente después de un tiempo o hasta la palabra clave, parte de la prueba que sigue al if o elif reservado palabras, parte de cualquier comando ejecutado en un && o || lista excepto el comando que sigue al && o || final, cualquier comando en una tubería pero el último, o si el comando es el valor de retorno se está invirtiendo con! Una trampa en ERR, si se establece, se ejecuta antes de que salga el shell. Esta opción se aplica al entorno de shell y a cada entorno de shell ronment por separado (ver ENTORNO DE EJECUCIÓN DE MANDOS arriba), y puede hacer que las subcapas salgan antes de ejecutar Todos los comandos en la subshell.fuente
setrequiere? : - /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