Introduction au script Bash sous Linux : créer son premier script !
Sommaire
- I. Présentation
- II. Qu'est-ce que le Bash ?
- III. Premiers pas avec les commandes Bash
- A. Syntaxe générique des commandes Bash
- B. Commande pwd : affiche le répertoire de travail actuel
- C. Commande ls : liste les fichiers et les dossiers
- D. Commande cd : changer de répertoire courant, au niveau du shell
- E. Commande mkdir : créer un nouveau répertoire
- F. Commande touch : créer un fichier
- G. Commande rm : supprime des fichiers ou des répertoires
- H. L'aide et les pages de manuel
- IV. Comment créer un script Bash ?
- V. Écrire son premier script Bash sous Linux
- VI. Script Bash : variable, condition if, etc.
- VII. Le pipeline en Bash
- VIII. Conclusion
I. Présentation
Dans ce tutoriel, nous allons partir à la découverte de l'interpréteur de commandes Bash sous Linux. Au-delà de permettre à l'utilisateur d'exécuter des commandes pour effectuer l'administration d'une machine, le Bash va être très utile pour automatiser des tâches sur Linux. Cet article d'introduction vous aidera à faire vos premiers pas avec le Bash sous Linux.
Suite à la lecture de cet article, vous devriez être en mesure de mettre en pratique le Bash sous Linux afin d'automatiser vos premières tâches à l'aide de scripts.
II. Qu'est-ce que le Bash ?
Le Bash, acronyme de "Bourne Again Shell", est l'un des interpréteurs de commandes les plus utilisés sur les systèmes Unix et Linux. Il est présent par défaut sur la majorité des distributions Linux, notamment les plus populaires tels que Debian, Ubuntu, Rocky Linux, etc. Autrement dit, Bash est ce que l'on appelle un shell, c'est-à-dire une interface système qui se positionne entre l'utilisateur et le système d'exploitation.
Bash permet d'exécuter des commandes sur la machine locale, de créer et d'exécuter des scripts pour automatiser des tâches selon les besoins d'un utilisateur ou d'une organisation. De plus, c'est aussi un excellent moyen de gérer une machine et les données qu'elle stocke.
Si vous travaillez sur les environnements Linux et que vous désirez être à l'aise dans l'administration des serveurs sous Linux, Bash est une compétence essentielle.
III. Premiers pas avec les commandes Bash
D'abord, il est important de se familiariser avec les commandes de base du Bash. Ceci servira d'introduction avant d'évoquer les scripts Bash en tant que tel. Parmi ces commandes, nous allons retrouver des commandes basiques pour lister le contenu d'un répertoire, se déplacer d'un répertoire à un autre, créer un dossier ou un fichier ou encore supprimer des fichiers.
A. Syntaxe générique des commandes Bash
Chaque commande Bash dispose d'un nom et d'un ensemble d'options qui lui sont propres, selon ses fonctionnalités. L'écriture d'une commande Bash suit le modèle suivant :
commande [option(s)] [argument(s)]
Les options vont permettre de personnaliser le comportement de la commande Bash en fonction de nos besoins. Les arguments correspondent à nos valeurs personnalisées que l'on souhaite passer à la commande. Certaines options exigent un argument, d'autres non, tout dépend du fonctionnement de la commande.
commande option argument
ls -a /home/flo
Enfin, il est à noter qu'il y a des noms longs ("--NomOption") et des noms courts ("-Lettre") pour les options. Par exemple, avec la commande "ls" l'option "--recurse" peut également être écrite "-R", ce qui correspond à la fois à son nom long et à son nom court.
B. Commande pwd : affiche le répertoire de travail actuel
La commande "pwd" dont le nom signifie "Print Working Directory" affiche le répertoire courant de l'utilisateur, d'un point de vue du shell utilisé pour exécuter la commande. Ici, la commande retourne la valeur "/home/flo", ce qui est logique, car l'utilisateur se situe dans son répertoire personnel. Ceci est cohérent parce que le chemin du prompt indique "~".
pwd
C. Commande ls : liste les fichiers et les dossiers
La commande "ls" dont le nom est l'abréviation de "list" sert à lister le contenu d'un répertoire à partir du shell. L'exemple suivant sert à lister le contenu du répertoire "/home/flo". L'option "-l" étant là pour avoir un affichage long sous la forme d'une liste verticale.
ls -l /home/flo
Voici le contenu de ce répertoire sur la machine utilisée pour mes tests :
Cette commande contient de nombreuses options, et son affichage par défaut retourne des informations précieuses telles que les permissions, le groupe propriétaire et l'utilisateur propriétaire.
D. Commande cd : changer de répertoire courant, au niveau du shell
La commande "cd" sert à changer le répertoire dans lequel on se situe au niveau du shell actuel. Autrement dit, elle permet de naviguer dans les volumes de la machine à partir de la ligne de commande, comme nous pourrions le faire avec un explorateur de fichiers en mode graphique.
cd <chemin cible>
cd /etc
cd /tmp
E. Commande mkdir : créer un nouveau répertoire
La commande "mkdir", correspondante à "make directory", sert à créer des répertoires sur une machine Linux. Elle peut être utilisée pour créer un seul répertoire ou une arborescence complète.
Ainsi, l'exemple ci-dessous sert à créer le répertoire "Informatique" dans "/home/flo/Documents" car il s'agit de mon répertoire de travail actuel.
mkdir Informatique
En image, ce sera plus compréhensible :
L'exemple ci-dessous sert à créer les répertoires "Sources" et "Scripts" dans le répertoire "/home/flo/Documents/Informatique".
mkdir /home/flo/Documents/Informatique/{"Sources","Scripts"}
Le résultat en image :
F. Commande touch : créer un fichier
La commande "touch" sert à modifier les horodatages sur les fichiers Linux, c'est-à-dire les heures d'accès et de modification des fichiers. Elle peut aussi être utilisée pour créer un fichier vide : c'est surtout cet usage qui va nous intéresser pour cette introduction.
L'exemple ci-dessous permet de créer un fichier vide nommé "demo.txt" dans le répertoire "/home/flo/Documents/Informatique/Scripts/".
touch /home/flo/Documents/Informatique/Scripts/demo.txt
G. Commande rm : supprime des fichiers ou des répertoires
La commande "rm" peut être utilisée pour supprimer un fichier ou un répertoire, ainsi qu'un ensemble de fichiers et de répertoires, selon les besoins. Particulièrement puissante, si elle est mal utilisée, elle peut faire des dégâts très importants sur une machine Linux... Il est à noter qu'il y a aussi la commande "rmdir" pour la suppression de répertoires.
L'exemple ci-dessous sert à supprimer le répertoire "Sources" créé précédemment. L'option "-r", pour la récursivité, est indispensable, car il s'agit d'un répertoire.
rm -r /home/flo/Documents/Informatique/Sources/
L'exemple ci-dessous, très proche du précédent, va supprimer tout le contenu du répertoire sans supprimer le répertoire "Scripts" en lui-même.
rm -r /home/flo/Documents/Informatique/Scripts/*
Nous pouvons considérer ces commandes comme la base pour la manipulation de données et la navigation sur un système Linux à partir du shell. Avant de passer à l'écriture d'un script, nous allons évoquer le système d'aide.
H. L'aide et les pages de manuel
Comment obtenir de l'aide pour apprendre à utiliser une commande Bash ? Voilà une excellente question. Sachez que chaque commande intègre une aide qu'il est possible de consulter en appelant l'option "--help". Voici un exemple pour voir l'aide de la commande "ls" afin d'obtenir des informations complémentaires sur ses différentes options et leur signification.
De plus, nous pouvons consulter les pages de manuel de chaque commande, c'est-à-dire sa documentation, avec la commande man. Il suffit de spécifier le nom de la commande pour laquelle vous souhaitez obtenir de l'aide :
man ls
Donc, suite à l'exécution de cette commande, nous obtenons le résultat suivant :
Une recherche Web donne également accès à cette aide, car plusieurs sites permettent de consulter les versions en ligne des "man pages".
Désormais, nous allons apprendre à créer un script : ce sera surement l'occasion de mettre en pratique une ou plusieurs des commandes que nous venons d'étudier.
IV. Comment créer un script Bash ?
Avant même de parler du contenu d'un script Bash, comment pouvons-nous créer et éditer un script Bash sur une machine Linux ?
Sachez que les scripts Bash utilisent l'extension ".sh", au même titre que PowerShell utilise l'extension ".ps1" et Python l'extension ".py". Le nom de notre Bash devra donc terminer par ".sh".
Le script Bash peut être créé en tant que nouveau fichier avec une application, puis enregistré dans un second temps avec un nom respectant ce format. Sinon, nous pouvons aussi le créer avec la commande "touch" puis l'ouvrir avec l'application de notre choix pour le modifier.
C'est ce que nous allons faire ! Nous allons créer le fichier "ScriptBash.sh" à la racine du profil de notre utilisateur.
touch ~/ScriptBash.sh
Afin d'éditer ce script Bash, nous allons pouvoir utiliser les éditeurs de texte habituels lorsque l'on travaille sur Linux, à savoir l'éditeur minimaliste "nano" ou l'éditeur "vim" beaucoup plus complet, mais aussi plus difficile à appréhender. Enfin, si vous recherchez un véritable éditeur de code, vous devriez installer Visual Studio Code sur votre machine (gratuit) :
En ce qui me concerne, nano sera utilisé dans la suite de ce tutoriel, mais libre à vous d'utiliser l'application avec laquelle vous êtes plus à l'aise. L'éditeur Visual Studio Code étant recommandé.
V. Écrire son premier script Bash sous Linux
A. Ajouter le shebang à un script Bash
D'abord, nous allons ouvrir le fichier "ScriptBash.sh" pour l'éditer et commencer à écrire nos premières lignes de code... mais par où commencer ?
nano ~/ScriptBash.sh
La première ligne de votre script doit toujours être le Shebang ! Quoi ? Le Shebang est un élément important présent sur la première ligne d'un script dont l'objectif est d'indiquer l'interpréteur de script à utiliser pour exécuter le code du script ! Autrement dit, cette ligne va être utile pour indiquer qu'il convient d'utiliser le binaire de Bash.
Voici la ligne à ajouter :
#!/bin/bash
Ce qui donne :
B. Ajouter nos premières lignes de code
À la suite de ces lignes, il ne reste plus qu'à ajouter nos instructions, c'est-à-dire les commandes à exécuter, les commentaires, etc... Selon nos besoins.
Pour commencer, nous allons simplement écrire une phrase dans la console : "Hello World ! Premier script Bash !" à l'aide de la commande "echo".
#!/bin/bash
echo "Hello World ! Premier script Bash !"
Pour respecter les bonnes pratiques, nous allons aussi ajouter un commentaire pour expliquer à quoi sert cette ligne. Pour ajouter un commentaire, ajoutez simplement un "#" en début de ligne.
#!/bin/bash
# Ecrire un message dans la console
echo "Hello World ! Premier script Bash !"
Il n'est pas utile d'ajouter un point-virgule à la fin de la ligne. Bash sait que la commande se termine à la fin de la ligne et que la ligne suivante correspond à une autre commande. Néanmoins, il sera nécessaire d'inclure un point-virgule pour préciser plusieurs commandes sur la même ligne.
Enfin, enregistrez et fermez le fichier puisque nous allons apprendre à exécuter un script Bash sur Linux !
C. Exécuter un script Bash sur Liunx
Comment pouvons-nous exécuter ce script pour le tester ? Nous pouvons l'appeler en préfixant son nom par "./".
cd ~
./ScriptBash.sh
Une erreur est retournée : "bash: ./ScriptBash.sh: Permission non accordée". Que se passe-t-il ? Nous allons lister le contenu de notre répertoire pour jeter un œil aux permissions de notre fichier...
ls -l
Effectivement, nous pouvons constater qu'il y a des permissions de lecture (r) et d'écriture (w), mais il manque les permissions d'exécution !
Pour rendre ce script Bash exécutable, vous devez modifier les permissions de cette façon :
chmod +x ScriptBash.sh
Ensuite, tentez d'exécuter le script une nouvelle fois... Cette fois-ci, il est exécuté ! Finalement, la bonne nouvelle, c'est que le résultat attendu est retourné dans la console.
Sachez que sans éditer les permissions du fichier, nous aurions pu l'exécuter de cette façon :
bash ScriptBash.sh
Dans la suite de ce tutoriel, nous allons créer un nouveau script Bash plus complet, afin de découvrir un cas d'usage réel et des notions supplémentaires.
VI. Script Bash : variable, condition if, etc.
Nous allons créer un script Bash dont l'objectif sera le suivant : tenter d'effectuer un ping vers une machine, via son adresse IP ou son nom, afin de déterminer si elle est en ligne ou non. Ce sera l'occasion de faire nos premiers pas avec les variables en Bash et utiliser aussi une structure conditionnelle "If-Else". Le script complet est disponible à la fin de cette partie.
Créez un nouveau fichier nommé "ping.sh" et ouvrez-le avec un éditeur afin de pouvoir écrire des lignes de code. Suivez les différentes étapes ci-dessous pour construire votre script Bash progressivement.
A. Déclarer une variable en Bash
Commencez par insérer les lignes présentées ci-dessous.
Explications : pour déclarer une variable en Bash, vous devez écrire le nom de la variable suivi d'un signe égal (=) puis de la valeur à assigner à cette variable. Il est important de préciser qu'il ne doit pas y avoir d'espace ni avant ni après le signe égal !
Ici, nous déclarons la variable "SERVEUR" et nous lui affectons la valeur "192.168.1.254". Puis, lorsque nous appellerons cette variable par son nom, elle sera remplacée par sa valeur. Pour l'appeler, son nom doit être précédé par le signe "$".
#!/bin/bash
# Définir l'adresse du serveur sur lequel effectuer le ping
SERVEUR=192.168.1.254
B. Rediriger la sortie d'une commande en Bash
La seconde étape consiste à effectuer un ping vers ce serveur en appelant notre variable.
Explications : nous allons simplement utiliser la commande "ping" que vous connaissez déjà, en ajoutant le paramètre "-c" pour effectuer 2 ping (sur Linux, la commande ping doit être arrêtée manuellement si l'on ne précise pas le nombre de ping à effectuer).
La subtilité réside dans l'utilisation du caractère ">" à la suite de la commande ping pour rediriger la sortie de la commande vers un fichier, en l'occurrence ici, un fichier vide ("/dev/null"). L'objectif est de masquer la sortie de la commande ping : ce qui nous intéresse, c'est le résultat et non la sortie.
# Envoyer 2 ping au serveur correspondant à la varialbe $SERVEUR
ping -c 2 $SERVEUR > /dev/null
C. Écrire sa première structure conditionnelle If en Bash
La dernière étape consiste à évaluer le résultat de la commande ping pour déterminer si l'hôte définit dans la variable "SERVEUR" est joignable ou non. Ceci va nous amener à utiliser une structure conditionnelle "if-else".
Quelques mots sur la structure conditionnelle If-Else :
La structure conditionnelle va nous permettre de faire un test appelé une condition (comparer deux valeurs, par exemple) et en fonction du résultat, nous pourrons exécuter une action. Dans le cas où la condition est vrai, le code à la suite du "then" sera exécuté, tandis que si la condition est fausse, c'est le code à la suite du "else" qui sera exécuté (ceci est facultatif).
if [ condition ]
then
# Code à exécuter si la condition est vraie
else
# Code à exécuter si la condition est fausse
fi
Explications :
En Bash, "$?" est une variable spéciale qui contient le code de retour de la dernière commande exécutée, donc la commande "ping" dans notre cas. Cette variable est utilisée pour vérifier si une commande s'est exécutée correctement ou si elle a rencontré une erreur. Un code de retour de "0" indique que la commande s'est exécutée avec succès.
Nous allons évaluer le résultat de cette variable dans notre condition "if" : si elle n'est pas égale à "0", c'est qu'il y a eu un problème lors du ping de l'hôte, sinon, c'est que tout s'est bien passé ! Nous utiliserons la commande "echo" pour écrire du texte dans la console.
# Déterminer si le serveur est en ligne ou pas
if [ $? -ne 0 ]
then
echo "Erreur - Le serveur $SERVEUR n'a pas répondu au ping !"
else
echo "OK - Le serveur $SERVEUR est en ligne."
fi
D. Le script complet
Ainsi, pour finir, voici le code complet de ce script :
#!/bin/bash
# Définir l'adresse du serveur sur lequel effectuer le ping
SERVEUR=192.168.1.254
# Envoyer 2 pings au serveur correspondant à la varialbe $SERVEUR
ping -c 2 $SERVEUR > /dev/null
# Déterminer si le serveur est en ligne ou pas
if [ $? -ne 0 ]
then
echo "Erreur - Le serveur $SERVEUR n'a pas répondu au ping !"
else
echo "OK - Le serveur $SERVEUR est en ligne."
fi
Nous n'avons plus qu'à l'exécuter pour tester son bon fonctionnement :
chmod +x ping.sh
./ping.sh
Voici un exemple de sortie :
VII. Le pipeline en Bash
Pour finir cette introduction au scripting Bash sous Linux, nous allons évoquer une notion très importante : le pipeline, correspondant au caractère "|" que nous retrouvons sur la touche 6 d'un clavier AZERTY.
Le pipeline permet de connecter plusieurs commandes entre elles puisque la sortie d'une commande sert d'entrée pour la seconde commande, et ainsi de suite. En effet, la sortie standard (stdout) d'une commande est redirigée comme entrée standard (stdin) de la commande suivante. Le fait de pouvoir combiner des commandes ouvre des possibilités très intéressantes, notamment pour effectuer des filtres, des recherches ou des opérations plus complexes.
<Première commande> | <Deuxième commande> | <Troisième commande> | <Etc...>
Si nous souhaitons compter le nombre de lignes présentes dans notre script Bash "ping.sh", comment pouvons-nous faire ?
Nous pouvons coupler l'utilisation de deux commandes :
- cat pour afficher le contenu du fichier.
- wc dont le nom signifie "Word Count" pour compter le nombre de lignes dans notre fichier.
La commande "cat" va nous permettre de récupérer le contenu du fichier et de l'envoyer à la commande "wc" par l'intermédiaire du pipeline, afin de retourner le nombre de lignes.
Ce qui donne la commande suivante :
cat ping.sh | wc -l
En fin de compte, nous savons désormais qu'il y a 15 lignes dans notre script Bash !
VIII. Conclusion
Cette introduction à la rédaction de scripts Bash touche à sa fin ! Nous avons abordé l'utilisation de quelques commandes, ainsi que la création et l'exécution d'un script Bash, puis nous avons créé nos deux premiers scripts Bash ! Désormais, il ne vous reste plus qu'à pratiquer sur différents cas d'usage pour monter en compétences sur ce sujet.
Pour approfondir le sujet, vous pouvez consulter nos tutoriels Bash en utilisant le lien ci-dessous :
Article très intéressant pour débuter en scripting bash