Créez des scripts Bash exécutables et réutilisables

Vous enchaînez souvent les mêmes commandes pour préparer vos fichiers de données ou analyser des logs : il devient évident qu’un simple copier-coller depuis un bloc-notes n’est plus du tout suffisant. Pour accompagner la croissance de notre infrastructure, l'automatisation est la clé. Vous allez donc commencer par décortiquer le fonctionnement d'un script, avant de créer votre premier fichier exécutable. Ensuite, vous apprendrez à le rendre dynamique grâce à l'utilisation de variables et d'arguments, pour enfin faire dialoguer votre programme avec ses utilisateurs.

Comprenez ce qu’est un script Bash et quand l’utiliser

Un script est particulièrement utile lorsque vous exécutez régulièrement les mêmes commandes, lorsque la procédure devient un peu longue, ou lorsque vous souhaitez fournir à d’autres personnes un moyen simple et fiable de reproduire une tâche.

L’enjeu n’est donc pas d’automatiser systématiquement, mais d’identifier les actions qui gagnent réellement à être rejouées de façon fiable.

Créez et éditez un fichier de script Bash

Un script Bash est avant tout un fichier texte contenant des commandes interprétées par Bash.

Par convention, on lui donne souvent l’extension  .sh. Elle n’est pas indispensable pour l’exécuter, mais elle sert de repère : en voyant le nom du fichier, on comprend tout de suite qu’il contient un script Bash.

Mais alors, qu'est-ce qui différencie un simple fichier texte d'un véritable programme exécutable ? 

La réponse tient en une seule ligne, primordiale, appelée le shebang.

Cette ligne indique au système avec quel programme exécuter le script.

Par exemple,  #!/bin/bash  signifie simplement : « exécute ce fichier avec Bash ». Un script Bash reste donc un simple fichier texte. Ce qui le rend exécutable, c’est le fait qu’il indique avec quel programme l’exécuter et qu’on lui accorde le droit d’exécution.

Une fois votre fichier rédigé, vous pourriez être tenté de le lancer immédiatement. Pourtant, le système vous bloquera. Pourquoi ? Pour une question de sécurité. Sous Linux, aucun fichier nouvellement créé ou téléchargé ne possède le droit de s'exécuter de lui-même. C'est une protection importante pour empêcher un code malveillant de s'activer à votre insu. Pour transformer définitivement votre texte en outil fonctionnel, vous allez devoir lui accorder manuellement des droits d'exécution.

Regardons comment mettre tout cela en pratique et faire naître votre premier script directement dans votre terminal.

Dans cette vidéo, on a :

  • créé et édité un nouveau fichier avec l'extension.sh,

  • ajouté le shebang (#!/bin/bash) pour définir l'interpréteur,

  • constaté l'erreur de permission liée à la sécurité par défaut de Linux,

  • accordé les droits d'exécution au fichier avec la commandechmod +x,

  • exécuté avec succès notre script depuis notre dossier courant.

Rendez votre script réutilisable avec des variables et des arguments

Votre script fonctionne, c'est un excellent début ! Mais pour l'instant, il traite toujours exactement le même fichier, stocké au même endroit. C'est ce que l'on appelle écrire du code en dur.

Le problème ? Si vous voulez analyser un autre fichier, vous devez modifier directement le script. Ce n’est ni pratique, ni adapté à un usage partagé. Un bon script doit pouvoir s’adapter à ce que vous lui demandez, sans être modifié à chaque utilisation.

Pour lui donner cette souplesse, vous allez utiliser des variables et des arguments.

Les variables pour stocker l’information

Une variable permet de stocker une valeur dans votre script. Vous lui donnez un nom explicite, puis vous pouvez réutiliser cette valeur dans vos commandes grâce au symbole  $  .

REPERTOIRE_CIBLE="/var/log"
ls -l $REPERTOIRE_CIBLE

Vous pouvez ainsi centraliser une information et la modifier facilement sans toucher à toutes vos commandes.

Les arguments pour interagir depuis le terminal 

Encore plus pratique : vous pouvez fournir une valeur directement au moment où vous lancez le script.

Dans votre script :

  • $1 récupère le tout premier argument tapé après le nom du script.

  • $2récupère le deuxième.

  • $@est un raccourci qui rassemble absolument tous les arguments fournis.

Concrètement, si vous tapez la commande  ./analyse_logs.sh system.log  , la valeur  "system.log"  sera instantanément stockée dans  $1  et utilisée par vos commandes.

Confirmer à l'utilisateur ce que le script a compris

Votre script est maintenant flexible : il s'adapte à ce qu'on lui fournit au moment de l'exécution. 

Mais comment vérifier qu’il traite bien le bon fichier ?

C'est ici qu'intervient la commande echo. La commande echo permet d’afficher un message dans le terminal. En y intégrant$1  , vous confirmez immédiatement à l’utilisateur ce que le script est en train de faire.

Regardez comment ces trois concepts se combinent parfaitement pour créer un outil qui s'adapte à son contexte d'exécution. 

#!/bin/bash
# Le script utilise l'argument $1 pour savoir quel fichier traiter
echo "Début de l'analyse pour le fichier : $1"
cat $1
echo "Analyse terminée avec succès."

Votre script n’est plus une boîte noire : il informe clairement l’utilisateur à chaque étape.

Récupérez des entrées utilisateur dans un script

Vous venez de partager votre nouveau script avec l'équipe.

Mais que se passe-t-il si un collègue le lance en oubliant de préciser le nom du fichier en argument ?

Dans ce cas, le script peut d’abord vérifier si une valeur a bien été fournie. Et lorsqu’une information doit être saisie au moment de l’exécution, il est aussi possible de faire dialoguer le script avec son utilisateur. La commande  read  permet de demander une information directement dans le terminal. Le script se met alors en pause, attend la réponse de l’utilisateur, puis l’enregistre dans une variable. 

 Elle complète parfaitement l’usage des arguments, en particulier lorsque l’entrée n'est pas connue à l’avance. Pour une interface claire, utilisez l'option  

-p  (prompt) qui affiche votre question juste avant la zone de saisie :

read -p "Quel fichier souhaitez-vous analyser ? " FICHIER_UTILISATEUR

Un script professionnel peut ainsi combiner les arguments fournis au lancement et la saisie interactive. Voyons comment sécuriser notre outil de cette manière.

Dans cette vidéo, on a :

  • ajouté une demande d'entrée avec la commandereadpour dialoguer avec l'utilisateur,

  • stocké la réponse saisie dans une variable,

  • exécuté le script et saisi une valeur au clavier,

  • combiné un argument et unreadpour permettre au script de s’adapter à différents modes d’utilisation.

À vous de jouer

Contexte 

Dans le cadre de vos missions pour l'équipe, vous recevez désormais régulièrement des fichiers texte transmis par un collègue contenant l'état de nos serveurs, et vous devez vérifier rapidement leur contenu depuis votre terminal. Un fichier “serveurs_statut.txt” vous est fourni et servira de fichier d'entrée pour tester votre script. Votre script devra afficher son contenu en utilisant son nom passé en argument.

Plutôt que de saisir manuellement les mêmes commandes de lecture chaque matin, vous décidez d'appliquer ce que vous venez de voir : vous allez créer un petit outil sur-mesure. Votre objectif est de concevoir un script qui annonce clairement le nom du fichier en cours d'analyse avant d'en afficher le contenu complet.

Préparation de l’environnement 

Avant de commencer, vous devez disposer du fichier  “serveurs_statut.txt” dans votre dossier de travail sur votre machine virtuelle Ubuntu. Assurez-vous que votre terminal est bien positionné dans votre dossier personnel :

cd ~

À partir de là, deux méthodes sont possibles, choisissez celle qui vous convient :

Méthode 1 - Via l'interface graphique d'Ubuntu

  1. Depuis votre machine virtuelle Ubuntu, ouvrez Firefox.

  2. Connectez-vous à OpenClassrooms et rendez-vous sur cette page du cours.

  3. Cliquez sur le lien du fichier pour le télécharger. Il se place automatiquement dans le dossier Téléchargements.

  4. Depuis le terminal, déplacez-le dans votre dossier personnel :

mv ~/Téléchargements/serveurs_statut.txt ~/

Méthode 2 - Directement depuis le terminal

  1. Ouvrez un terminal et tapez la commande suivante :  

    wget -O serveurs_statut.txt https://bit.ly/4cnPdtz
  2. Le fichier est téléchargé directement dans votre dossier personnel. Vérifiez qu'il est bien présent :  

    ls

Consignes

Pour accomplir cette tâche et automatiser votre vérification, suivez ces étapes :

  1. Créez un script Bash dans un fichier nomméafficher_fichier.sh.

  2. Ouvrez ce fichier dans un éditeur de texte en ligne de commande comme Vim.

  3. Préparez le script pour qu’il puisse être exécuté correctement par le système.

  4. Faites en sorte qu’il récupère le nom d’un fichier texte passé en argument lors du lancement.

  5. Ajoutez un message indiquant clairement quel fichier est en cours de lecture.

  6. Affichez ensuite le contenu complet du fichier fourni.

  7. Enregistrez votre travail, puis rendez le script exécutable.

  8. Testez votre script avec le fichierserveurs_statut.txt.

En résumé

  • Un script Bash est un fichier texte contenant une suite de commandes exécutées automatiquement, permettant d’automatiser des tâches répétitives et de gagner en efficacité.

  • La création d’un script repose sur l’ajout du shebang#!/bin/bash, l’utilisation de l’extension.shet l’attribution des droits d’exécution avec la commandechmod +x.

  • L’utilisation de variables et d’arguments comme $1,$2et$@permet de rendre les scripts dynamiques, flexibles et réutilisables dans différents contextes.

  • La commandeechofournit des messages de retour à l’utilisateur, facilitant la compréhension et le suivi des actions exécutées par le script.

  • La commandereadpermet de recueillir des entrées interactives, rendant les scripts capables de dialoguer avec l’utilisateur et de sécuriser leur utilisation.

Vos scripts fonctionnent de façon satisfaisante et interagissent avec l'équipe, c'est une excellente base ! Mais que se passera-t-il si un fichier manque ou si un collègue saisit un paramètre incorrect ? Pour éviter les erreurs bloquantes, vos outils doivent apprendre à réagir seuls aux imprévus. C'est ce que nous allons accomplir dans la suite de notre mission en ajoutant de l’intelligence et de la robustesse à vos scripts !

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous