Recherche…


Espaces blancs lors de l'attribution de variables

Les espaces ont leur importance lors de l’attribution des variables.

foo = 'bar' # incorrect
foo= 'bar'  # incorrect
foo='bar'   # correct

Les deux premières entraîneront des erreurs de syntaxe (ou pire, l'exécution d'une commande incorrecte). Le dernier exemple définira correctement la variable $foo sur le texte "bar".

Manquer la dernière ligne dans un fichier

La norme C stipule que les fichiers doivent se terminer par une nouvelle ligne. Par conséquent, si EOF arrive en fin de ligne, certaines commandes risquent de ne pas manquer cette ligne. Par exemple:

$ echo 'one\ntwo\nthree\c' > file.txt

$ cat file.txt
one
two
three

$ while read line ; do echo "line $line" ; done < file.txt
one
two

Pour vous assurer que cela fonctionne correctement dans l'exemple ci-dessus, ajoutez un test pour qu'il continue la boucle si la dernière ligne n'est pas vide.

$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt
one
two
three

Les commandes en échec n'arrêtent pas l'exécution du script

Dans la plupart des langages de script, si un appel de fonction échoue, il peut déclencher une exception et arrêter l'exécution du programme. Les commandes Bash n'ont pas d'exceptions, mais elles ont des codes de sortie. Un code de sortie non nul signale un échec, cependant, un code de sortie différent de zéro n'arrêtera pas l'exécution du programme.

Cela peut conduire à des situations dangereuses (bien que forcément artificielles) comme ceci:

#!/bin/bash
cd ~/non/existent/directory
rm -rf *

Si cd -ing dans ce répertoire échoue, Bash ignorera l'échec et passera à la commande suivante, en nettoyant le répertoire à partir duquel vous avez exécuté le script.

La meilleure façon de résoudre ce problème consiste à utiliser la commande set :

#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *

set -e indique à Bash de quitter le script immédiatement si une commande renvoie un statut différent de zéro.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow