erreurs communes Bash - ini

erreurs communes et quelques tips

voir aussi (en anglais) http://www.tldp.org/LDP/abs/html/debugging.html

source en anglais: http://linuxcommand.org/lc3_wss0090.php

Créer un fichier nommé trouble.bash tq

num lignes A copier coller
1
2
3
4
5
6
7
8
9
#!/bin/bash

number=1

if [ $number = "1" ]; then
    echo "Number equals 1"
else
    echo "Number does not equal 1"
fi

ex var vide  (ligne 5)

en ligne 3 (décla var) retirer le 1 pour laisser number= puis l'exécuter (./trouble.bash)  Bash va retourner cette erreur sur la ligne 5 (car  => test) et ne voit pas celle de la ligne 3 (une var non ini ne génère pas d'erreur - tester en cli):
/trouble.bash: [: =: unary operator expected.

En ligne 5, bash expand en voyant le $number (en if [ 1 = "1" ]; then ) mais avec la var vide: if [ = "1" ]; then erreur (opérateur = n'a qu'une opérande)...
Avec if [ "$number" = "1" ]; then->  bash expand en if [ "" = "1" ]; then (ce qu'on veux)

 

Quote " manquante

Ligne 6, effacer le dernier " ->  echo "Number equals 1
ce qui génère l'erreur suivante, car en cherchant le 2e " bash arrive à la fin (EOF)

./trouble.bash: line 8: unexpected EOF while looking for matching "
./trouble.bash: line 10 syntax error: unexpected end of file

Tips: isoler le code avec des commentaires #

Ici, en ajoutant en lignes 7 et 8 un # (ie retirer le else) on aurait vu la meme erreur et déduire que l'erreur n'est pas lié au else

Tips: ajouter des echo (du type stub ou afficher le contenu de variables)

 

faire causer bash... tracing

sur 1ere ligne du script ( avec -x)

Modifier la 1ere ligne en  #!/bin/bash -x  et bash affichera chaque ligne (avec les expansions réalisées) comme il l'execute.

+ number=1
+ '[' 1 = 1 ']'
+ echo 'Number equals 1'
Number equals 1

Autre solution: la commande set

set -x   trace on... et   set +x  trace off