O que faz o -e em um bash shebang?

24

Eu tenho um script bash com o seguinte:

#!/bin/bash -e

egrep "^username" /etc/passwd >/dev/null 
if[ $? -eq 0 ] 
then 
  echo "doesn't exist" 
fi

Este script não será executado sem o -e. O que o -e faz para esse script? Além disso, o que o $? faz nesse contexto?

    
por Chris Henry 30.06.2011 / 21:42

3 respostas

25

Saída de erro. Mais sinalizadores

Se houver um erro, ele sairá imediatamente.

O $? é o status de saída do comando passado. No Linux, um status de saída igual a 0 significa que o comando foi bem-sucedido. Qualquer outro status significaria um erro.

egrep "^ nome do usuário" / etc / passwd > / dev / null Procuraria o nome de usuário no arquivo / etc / passwd. Se ele encontrar, então o status de saída $? será igual a 0. Se não for encontrado, o status de saída será outra coisa (não 0), portanto, você "echo não existe".

    
por 30.06.2011 / 21:45
12

Todas as opções de linha de comando do bash estão documentadas em 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.
    
por 30.06.2011 / 21:45
0

Seu script está incorreto, porque

egrep "^username" /etc/passwd >/dev/null 
if[ $? -eq 0 ] 
then 
  #echo "doesn't exist" # WRONG
  echo "the USER EXISTS"
fi

exit status 0 - mean - está tudo OK, no caso do grep, significa "OK, encontrou a string". exit status! = 0 significa que algo está errado, no caso do grep 1 mean, "não encontrado", 2 significa "não pode abrir o input" ...

    
por 30.06.2011 / 23:39

Tags