Correction d’une erreur de syntaxe Bash près d’un jeton inattendu



Résolution des erreurs de syntaxe Bash : guide pratique

L’environnement de ligne de commande Bash sous Linux est un outil essentiel pour de nombreux développeurs. Cependant, des erreurs de syntaxe peuvent surgir, notamment celles signalant un « jeton inattendu ». Cet article explore les causes de ces erreurs et propose des solutions efficaces pour les corriger et améliorer votre maîtrise du codage Bash.

Comprendre l’erreur de syntaxe Bash près d’un jeton inattendu

Bash, en tant qu’interpréteur de commandes, traite les scripts .sh sous Linux. Une erreur de syntaxe survient lorsqu’une instruction n’est pas conforme à la grammaire du langage. Par exemple, une erreur proche du caractère ‘(‘ indique un problème de syntaxe à cet endroit précis. L’interpréteur arrête l’exécution du script à la première erreur rencontrée, il est donc crucial de corriger chaque problème séquentiellement.

Voici les causes fréquentes de ces erreurs :

  • Mauvaise gestion des séquences d’échappement : Les guillemets ou séquences d’échappement mal utilisés dans un script peuvent générer des erreurs.
  • Syntaxe incorrecte : Une commande mal formulée, comme un mauvais ordre de boucles, causera des erreurs de syntaxe.
  • Utilisation erronée des commandes : Une affectation de valeur incorrecte ou une mauvaise commande peut entraîner une erreur de syntaxe.
  • Incompatibilité de systèmes d’exploitation : Un script conçu pour Unix peut ne pas fonctionner correctement sous DOS, et vice-versa.
  • Problèmes lors de la copie de scripts : Un script copié depuis un autre système peut contenir des caractères cachés provoquant des erreurs.

Pour illustrer, nous utiliserons un fichier example.sh contenant plusieurs erreurs typiques :

str= ‘Première ligne de commande de ‘(fichier exemple)’ dans le script’
str= [(1,2),(3,4)]
if[ $day == “mon” ] then
 echo “mon”
else
 echo “no mon”
fi
for VARIABLE in {0..2}; then
do echo commande1; echo commande2; echo commande3; echo commande4; done
while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “pas mon”; done; fi

Méthode 1 : Correction manuelle des erreurs

La première approche consiste à corriger manuellement chaque erreur détectée. Voici les étapes à suivre :

  1. Exécution du script : Exécutez ./example.sh dans le terminal pour afficher les erreurs.
  2. Identification des erreurs : Notez les lignes où des erreurs de syntaxe sont signalées.
  3. Correction : Modifiez les lignes en utilisant les méthodes expliquées ci-dessous.
  4. Vérification : Réexécutez le script après les modifications pour confirmer la résolution des erreurs.

Étape I : Lire le contenu du fichier

Il est essentiel de pouvoir visualiser le code source pour le corriger. Plusieurs méthodes existent :

  • Option 1 : La commande cat : Utilisez cat -v example.sh pour afficher le contenu, y compris les caractères invisibles.
  • Note 1 : Remplacez example.sh par votre nom de fichier.

    Note 2 : L’option -v permet d’afficher les caractères non imprimables.

  • Option 2 : La commande vx : Utilisez sh -vx ./example.sh pour ouvrir le fichier en mode débogage, permettant de visualiser chaque étape.
  • Option 3 : La commande od -a : Utilisez od -a example.sh pour afficher tous les caractères, y compris les caractères invisibles, de votre script.

Étape II : Supprimer les sauts de ligne Windows

Les sauts de ligne Windows (CRLF) peuvent causer des problèmes. Pour les supprimer, utilisez la commande suivante :

tr -d 'r' < example.sh > correctedexample.sh

Étape III : Définir les autorisations

Assurez-vous que le nouveau fichier est exécutable en utilisant :

chmod 755 correctedexample.sh

Étape IV : Formater le code

Appliquez ces corrections de syntaxe :

  • Option 1 : Remplacer les guillemets simples par des guillemets doubles :

    Remplacez ' par ". Par exemple, str = 'texte' devient str = "texte".

    Note : Les guillemets doubles sont requis pour les chaînes contenant des paramètres, comme dans str = "[(1,2),(3,4)]".

  • Option 2 : Ajouter $ aux chaînes :

    Utilisez $ devant les chaînes. Par exemple, str = 'texte' devient str = $ 'texte'.

    Note : L’utilisation de $ pour les chaînes permet d’éviter l’échappement des caractères.

  • Option 3 : Convertir les tabulations en espaces :

    Assurez-vous que l’espacement est réalisé avec des espaces et non des tabulations.

    Par exemple, remplacez :

    do echo commande1;         echo commande2;                  echo commande3;                   echo commande4;           done

    par :

    do echo commande1; echo commande2; echo commande3; echo commande4; done
  • Option 4 : Utiliser des caractères d’échappement :

    Échappez les caractères spéciaux Bash comme les parenthèses () avec \. Par exemple, str = 'texte (exemple)' devient str = 'texte \(exemple\)'.

  • Option 5 : Utiliser des espaces entre les caractères :

    Veillez à ce qu’il y ait un espace entre les mots clés et les variables dans le script. Par exemple, la syntaxe if[ $day == "mon" ] est incorrecte. La bonne syntaxe est if [ $day == "mon" ].

  • Option 6 : Utiliser des séparateurs de commandes :

    Les commandes doivent être séparées par un point-virgule ; ou une nouvelle ligne. Par exemple, changez if [ $day == "mon" ] then en if [ $day == "mon" ]; then.

  • Option 7: Supprimer les instructions additionnelles :

    Dans une boucle, assurez-vous qu’il n’y a pas d’instruction superflue. Par exemple, il faut supprimer le « then » dans la boucle for pour qu’elle soit correctement exécutée.

    for VARIABLE in {0..2}; do echo commande1; echo commande2; echo commande3; echo commande4; done

  • Option 8: S’assurer de l’ordre de fermeture correct des instructions :

    Vérifiez l’ordre de fermeture des boucles imbriquées et des instructions conditionnelles, l’ordre d’ouverture et fermeture doit être respecté. Par exemple:

    while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “pas mon”; fi; done

Méthode 2 : Réécrire le code

Si la copie et le collage ont introduit des erreurs, réécrivez le code manuellement. Évitez les éditeurs de texte comme Microsoft Word, qui peuvent ajouter des caractères invisibles.

Méthode 3 : Utiliser dos2unix

Si vous passez d’un système Windows à Unix, utilisez la commande dos2unix pour convertir les sauts de ligne :

dos2unix.exe example.sh

***

Cet article vous a présenté des méthodes pour corriger les erreurs de syntaxe Bash proches d’un « jeton inattendu ». En suivant ces conseils, vous devriez être en mesure de résoudre efficacement vos problèmes de scripts Bash. N’hésitez pas à partager vos commentaires et questions dans la section dédiée.