Su publicación en realidad contiene 2 preguntas.
-
El
-eflag 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 de0significa 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.