GNU/Linux >> Znalost Linux >  >> Linux

Co dělá -e v bash shebang?

Váš příspěvek ve skutečnosti obsahuje 2 otázky.

  1. -e příznak dává skriptu pokyn k ukončení při chybě. Další příznaky

    Pokud dojde k chybě, okamžitě se ukončí.

  2. $? je výstupní stav posledního příkazu. V Linuxu stav ukončení 0 znamená, že příkaz byl úspěšný. Jakýkoli jiný stav by znamenal, že došlo k chybě.

Chcete-li použít tyto odpovědi na svůj skript:

egrep "^username" /etc/passwd >/dev/null

by hledal username v /etc/passwd soubor.

  • Pokud jej nalezne, pak stav ukončení $? bude rovno 0 .

  • Pokud jej nenajde, bude stav ukončení jiný (ne 0 ). Zde budete chtít spustit echo "doesn't exist" část kódu.

Bohužel ve vašem skriptu je chyba a tento kód byste provedli pokud uživatel existuje - změňte řádek na

if [ $? -ne 0 ]

abyste pochopili správnou logiku.

Nicméně pokud uživatel neexistuje, egrep vrátí kód chyby a kvůli -e shell se po tomto řádku okamžitě ukončí, takže byste se k této části kódu nikdy nedostali.


Všechny přepínače příkazového řádku bash jsou popsány v 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.

Linux
  1. Rozdíl mezi operátory Bash [[ Vs [ Vs ( Vs ((?

  2. Jak funguje příkaz Exit na Unixovém terminálu?

  3. Co dělá řádek '!/bin/sh -e'?

  1. Co znamená &na konci linuxového příkazu?

  2. Co znamená set -e ve skriptu bash?

  3. Jaké je použití $# v Bash

  1. Co znamená syntaxe |&v jazyce shellu?

  2. Co znamená symbol šipky (->) na příkazovém řádku?

  3. Jaký je rozdíl mezi &> a >&v bash?