Su publicación en realidad contiene 2 preguntas.
-
El
-e
flag indica al script que salga en caso de error. Más banderasSi hay un error, se cerrará de inmediato.
-
El
$?
es el estado de salida del último comando. En Linux, un estado de salida de0
significa que el comando fue exitoso. Cualquier otro estado significaría que ocurrió un error.
Para aplicar estas respuestas a su script:
egrep "^username" /etc/passwd >/dev/null
buscaría el username
en el /etc/passwd
archivo.
-
Si lo encuentra, el estado de salida
$?
será igual a0
. -
Si no lo encuentra, el estado de salida será otro (no
0
). Aquí, querrás ejecutar elecho "doesn't exist"
parte del código.
Desafortunadamente hay un error en su secuencia de comandos y ejecutaría ese código si el usuario existe - cambiar la línea a
if [ $? -ne 0 ]
para obtener la lógica correcta.
Sin embargo si el usuario no existe, egrep
devolverá un código de error, y debido al -e
opción, el shell saldrá inmediatamente después de esa línea, por lo que nunca llegará a esa parte del código.
Todos los modificadores de la línea de comandos de bash están documentados en man bash
.
-e Exit immediately if a pipeline (which may consist of a single simple command), a subshell command enclosed in parentheses, or one of the commands executed as part of a command list enclosed by braces (see SHELL GRAMMAR above) exits with a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test following the if or elif reserved words, part of any command executed in a && or || list except the command following the final && or ||, any command in a pipeline but the last, or if the command's return value is being inverted with !. A trap on ERR, if set, is executed before the shell exits. This option applies to the shell environment and each subshell envi- ronment separately (see COMMAND EXECUTION ENVIRONMENT above), and may cause subshells to exit before executing all the commands in the subshell.