bash example Scripting Shell: mourir sur n'importe quelle erreur




script shell if (3)

Supposons qu'un script shell (/ bin / sh ou / bin / bash) contient plusieurs commandes. Comment puis-je nettoyer proprement le script si l'une des commandes a un statut de sortie défaillant? Évidemment, on peut utiliser des blocs et / ou des rappels, mais y a-t-il une manière plus propre et plus concise? Utiliser && n'est pas vraiment une option non plus, car les commandes peuvent être longues, ou le script pourrait avoir des choses non triviales comme des boucles et des conditions.


Answer #1

Avec sh standard et bash , vous pouvez

set -e

Ce sera

$ help set
...
        -e  Exit immediately if a command exits with a non-zero status.

Cela fonctionne aussi (d'après ce que j'ai pu rassembler) avec zsh . Il devrait également fonctionner pour tout descendant de Bourne shell.

Avec csh / tcsh , vous devez lancer votre script avec #!/bin/csh -e


Answer #2

Peut-être pourriez-vous utiliser:

$ <any_command> || exit 1

Answer #3

Vous pouvez vérifier $? pour voir quel est le code de sortie le plus récent

par exemple

#!/bin/sh
# A Tidier approach

check_errs()
{
  # Function. Parameter 1 is the return code
  # Para. 2 is text to display on failure.
  if [ "${1}" -ne "0" ]; then
    echo "ERROR # ${1} : ${2}"
    # as a bonus, make our script exit with the right error code.
    exit ${1}
  fi
}

### main script starts here ###

grep "^${1}:" /etc/passwd > /dev/null 2>&1
check_errs $? "User ${1} not found in /etc/passwd"
USERNAME=`grep "^${1}:" /etc/passwd|cut -d":" -f1`
check_errs $? "Cut returned an error"
echo "USERNAME: $USERNAME"
check_errs $? "echo returned an error - very strange!"






scripting