
Un script en shell est un simple fichier texte contenant une suite de commandes que le terminal exécute automatiquement, ligne par ligne, sans avoir à les taper une à une. Ce fichier .sh permet d’automatiser des tâches répétitives sous Linux, qu’il s’agisse de copier des fichiers, d’afficher un message ou de lancer plusieurs programmes à la suite. Cet article explique comment créer ce fichier, ajouter le shebang, le rendre exécutable avec chmod +x, puis le lancer depuis la ligne de commande, avant de passer en revue les erreurs les plus fréquentes rencontrées par les débutants.
Qu’est-ce qu’un script shell et à quoi sert-il concrètement
Un script shell n’est rien d’autre qu’un fichier texte lisible, contenant des commandes identiques à celles qu’un utilisateur taperait directement dans un terminal. La différence est que ces commandes sont regroupées dans un fichier, ce qui permet de les exécuter en une seule fois, dans un ordre défini à l’avance.
Sous Linux, le shell est le programme qui interprète les commandes saisies dans le terminal. Bash, l’un des shells les plus répandus, dispose de son propre langage de script, appelé script Bash. Un fichier .sh contenant des instructions Bash reste donc un script shell au sens large, adapté à un interpréteur précis.
L’intérêt principal d’un script shell est de gagner du temps sur des tâches répétitives : sauvegarder des fichiers, nettoyer un dossier, installer plusieurs programmes, ou encore afficher des informations système. Une fois écrit, le script peut être relancé autant de fois que nécessaire, sans retaper les commandes.
Créer un fichier .sh avec un éditeur de texte
La création d’un script en shell commence par un simple fichier texte, portant généralement l’extension .sh pour indiquer clairement son contenu. Ce fichier peut être créé avec n’importe quel éditeur de texte disponible sous Linux, en ligne de commande ou en interface graphique.
Depuis le terminal, la commande suivante crée un nouveau fichier vide :
nano script.sh
L’éditeur nano s’ouvre alors, permettant de saisir directement le contenu du script. Une fois les commandes écrites, il suffit d’enregistrer le fichier et de quitter l’éditeur pour revenir au terminal.
Ajouter le shebang #!/bin/bash en première ligne
La toute première ligne d’un script shell doit indiquer quel interpréteur utiliser pour exécuter les commandes qui suivent. Cette ligne s’appelle le shebang, et pour un script Bash, elle s’écrit ainsi :
#!/bin/bash
Ce shebang indique au système que le fichier doit être interprété par Bash, situé à l’emplacement /bin/bash sur la plupart des distributions Linux. Sans cette ligne, le système peut tenter d’exécuter le script avec un autre interpréteur, ce qui provoque parfois des erreurs de syntaxe si des commandes propres à Bash sont utilisées.
Voici un exemple simple et complet, utilisant la commande echo pour afficher un message dans le terminal :
#!/bin/bash
echo "Bonjour, ce script fonctionne correctement."
Ce script minimal illustre la structure de base attendue par tout script shell : le shebang en première ligne, suivi des commandes à exécuter.
Rendre le script exécutable avec chmod +x
Une fois le fichier .sh créé, il n’est pas encore reconnu comme un programme exécutable par le système. Il faut lui accorder cette permission grâce à la commande chmod +x, qui ajoute le droit d’exécution au fichier :
chmod +x script.sh
Cette commande modifie les permissions du fichier sans changer son contenu. Elle est indispensable avant de pouvoir exécuter script shell directement comme un programme. Sans cette étape, le système considère le fichier comme un simple texte, non exécutable.
Il est possible de vérifier que la permission a bien été appliquée avec la commande suivante, qui affiche les droits du fichier :
ls -l script.sh
La présence de la lettre x dans les permissions affichées confirme que le fichier est désormais exécutable.
Exécuter un script shell : ./script.sh et bash script.sh
Il existe deux façons courantes d’exécuter script shell sous Linux, selon que le fichier a été rendu exécutable ou non.
La première méthode, la plus directe une fois chmod +x appliqué, consiste à lancer le fichier avec son chemin relatif :
./script.sh
Le préfixe ./ indique au terminal de chercher le fichier dans le dossier courant, plutôt que dans les emplacements système habituels. C’est une précaution normale sous Linux, qui évite d’exécuter par erreur un fichier portant le même nom qu’une commande système.
La seconde méthode ne nécessite pas que le fichier soit exécutable, car elle appelle directement l’interpréteur Bash pour lire et exécuter le contenu du fichier :
bash script.sh
Cette commande fonctionne même sans avoir utilisé chmod +x au préalable, puisque c’est Bash lui-même qui lit le fichier ligne par ligne. Elle est pratique pour tester rapidement un script sans modifier ses permissions.
Utiliser une variable Bash dans un script simple
Un script shell devient rapidement plus utile lorsqu’il manipule des variables. Une variable Bash permet de stocker une valeur pour la réutiliser plusieurs fois dans le script, sans la répéter à chaque ligne.
Voici un exemple simple combinant une variable et la commande echo :
#!/bin/bash
nom="Utilisateur"
echo "Bonjour $nom, votre script s'est bien exécuté."
Le symbole dollar devant le nom de la variable permet d’afficher sa valeur. Cette syntaxe de base suffit pour la plupart des scripts destinés à un usage courant, sans nécessiter de notions Bash avancées.
Dépannage : résoudre les erreurs fréquentes d’un script shell
Plusieurs erreurs reviennent régulièrement chez les débutants qui créent leur premier script en shell. Les identifier rapidement évite de perdre du temps à chercher la cause d’un blocage.
Permission denied. Ce message apparaît lorsque le fichier n’a pas encore reçu le droit d’exécution. La solution consiste à exécuter chmod +x script.sh avant de relancer le script avec ./script.sh.
Mauvais chemin d’accès. Une erreur du type « No such file or directory » survient souvent parce que le terminal ne se trouve pas dans le bon dossier. Il faut vérifier le dossier courant avec la commande pwd, puis se déplacer si nécessaire avec cd avant de relancer le script.
Commande introuvable. Le message « command not found » indique généralement une faute de frappe dans le nom d’une commande, ou l’absence du programme concerné sur le système. Vérifier l’orthographe exacte de la commande résout la plupart de ces cas.
Erreur de syntaxe. Une erreur de syntaxe peut provenir d’une parenthèse ou d’un guillemet mal fermé, ou d’un shebang absent ou mal écrit. L’outil ShellCheck, disponible sous Linux, permet d’analyser un script shell et de repérer automatiquement ce type d’erreur avant l’exécution.
Fins de ligne Windows. Un script rédigé ou copié depuis un éditeur Windows peut contenir des fins de ligne incompatibles avec Linux, provoquant des erreurs étranges à l’exécution. La commande suivante convertit le fichier au format attendu par Linux :
dos2unix script.sh
Tableau récapitulatif des éléments essentiels d’un script shell
| Élément | Rôle | Exemple | Erreur fréquente |
|---|---|---|---|
| Shebang | Indique l’interpréteur à utiliser | #!/bin/bash | Ligne absente ou mal placée |
| chmod +x | Rend le fichier exécutable | chmod +x script.sh | Oubli avant ./script.sh |
| Exécution directe | Lance le script comme un programme | ./script.sh | Permission denied |
| Exécution via Bash | Lance le script sans permission d’exécution | bash script.sh | Confusion avec ./script.sh |
Bonnes pratiques pour écrire un script Bash fiable et lisible 🐧
Un script en shell bien conçu commence toujours par un shebang clair et des commandes simples, faciles à relire plus tard. Ajouter quelques commentaires avec le symbole dièse aide à comprendre rapidement le rôle de chaque partie du script, surtout lorsqu’il est repris après plusieurs semaines.
Avant de considérer un script comme terminé, passer le fichier dans ShellCheck permet de repérer des erreurs de syntaxe ou des pratiques risquées, même dans un script simple. Cette vérification rapide évite bien des surprises lors de l’exécution sur un autre système Linux, et constitue une habitude utile dès les premiers scripts écrits en ligne de commande.
