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