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.