Aller au contenu principal

Mon premier script Bash

Notions théoriques

Vous savez déjà lancer des commandes Linux une par une dans un terminal (cd, ls, cp, chmod...). Un script Bash permet d'enchaîner plusieurs de ces commandes dans un seul fichier, pour les exécuter automatiquement, dans l'ordre, sans les retaper à la main.

En administration système, l'automatisation est essentielle : elle évite les erreurs de saisie, fait gagner du temps sur les tâches répétitives (sauvegardes, installations, vérifications...) et permet de documenter une procédure de façon exécutable.

Bash (Bourne Again SHell) est à la fois :

  • l'interpréteur de commandes que vous utilisez déjà dans votre terminal,
  • et un véritable langage de script, avec ses variables, ses conditions et ses boucles.

Le shebang

La toute première ligne d'un script Bash doit être :

#!/bin/bash

Cette ligne s'appelle le shebang. Elle indique au système quel interpréteur utiliser pour exécuter le fichier. Elle doit obligatoirement :

  • être la première ligne du fichier,
  • commencer en première colonne (aucun espace avant),
  • ne contenir aucun espace entre #! et /bin/bash.
info

Vous croiserez parfois #!/usr/bin/env bash à la place de #!/bin/bash. Cette variante recherche l'exécutable bash dans le $PATH plutôt que d'utiliser un chemin fixe, ce qui la rend un peu plus portable. Pour nos séances, #!/bin/bash suffit.

Les commentaires

Toute ligne commençant par # (sauf la toute première, le shebang) est un commentaire, ignoré par Bash. Il est recommandé de commencer chaque script par un petit en-tête expliquant son rôle :

#!/bin/bash
# Script : infos.sh
# Rôle : afficher quelques informations sur le serveur
# Auteur : Votre nom

Rendre un script exécutable

Un fichier de script est un fichier texte comme un autre : par défaut, il n'a pas le droit d'être exécuté. Il faut lui ajouter le droit d'exécution avec la commande chmod (déjà vue dans le cours Gestion des permissions) :

chmod +x infos.sh

Exécuter un script

Une fois le droit d'exécution accordé, il existe plusieurs façons de lancer un script :

./infos.sh # en indiquant le chemin (ici, le répertoire courant)
bash infos.sh # en demandant explicitement à bash de l'interpréter
/home/etu/infos.sh # avec un chemin absolu
attention

Écrire simplement infos.sh (sans ./ devant) ne fonctionne pas, même si le script est exécutable et que vous êtes dans le bon dossier. Le message d'erreur est infos.sh: command not found.

En effet, pour des raisons de sécurité, le répertoire courant ne fait pas partie du $PATH (la liste des dossiers où Linux cherche les commandes). Il faut donc préciser explicitement ./ pour dire « le fichier qui est ici, dans ce dossier ».

Erreurs fréquentes

MessageCause probable
Permission deniedLe script n'a pas le droit d'exécution → chmod +x
command not foundOubli du ./ devant le nom du script
bad interpreter: ... : No such file or directory (souvent avec ^M)Le fichier a été édité sous Windows et contient des retours à la ligne incompatibles
attention

Si vous éditez vos scripts avec un éditeur Windows, vérifiez que l'encodage des fins de ligne est bien au format Unix (LF), sinon le shebang lui-même peut devenir illisible pour Linux.

Enfin, il est courant de ranger ses scripts dans un dossier dédié, par exemple ~/scripts, pour les retrouver facilement.

Exemple pratique

#!/bin/bash
# Script : infos.sh
# Rôle : afficher un petit rapport système
# Auteur : Votre nom

echo "=== Rapport système ==="
echo "Date actuelle : $(date)"
echo "Nom de machine : $(hostname)"
echo "Utilisateur : $(whoami)"
echo "Temps de service : $(uptime -p)"
echo "=== Fin du rapport ==="

Pour l'utiliser :

nano infos.sh # on écrit le script
chmod +x infos.sh # on le rend exécutable
./infos.sh # on le lance
astuce

$(commande) permet d'insérer le résultat d'une commande directement dans un echo. Nous détaillerons cette syntaxe dans la prochaine séance, consacrée aux variables.

Test de mémorisation/compréhension


Que doit contenir obligatoirement la première ligne d'un script Bash ?


Pourquoi doit-on écrire ./script.sh et non simplement script.sh ?


Le message « bash: ./script.sh: Permission denied » signifie que...


Quel rôle joue une ligne commençant par # dans un script (hors première ligne) ?


TP pour réfléchir et résoudre des problèmes

Nous allons créer le premier script de notre boîte à outils d'administration : infos.sh. Ce script sera repris et enrichi au fil des prochaines séances.

Étape 1 — Créer le fichier et son shebang

Créez un fichier infos.sh dans un dossier ~/scripts.


Bonne pratique - Toujours la même première ligne

Prenez l'habitude d'écrire systématiquement #!/bin/bash en première ligne de chaque script, avant même d'écrire le reste. Un script sans shebang correct peut être exécuté par le mauvais interpréteur et se comporter de façon imprévisible.

Étape 2 — Afficher un message d'accueil et la date


Bonne pratique - Commenter son script

Commencez toujours vos scripts par un court en-tête (rôle, auteur, date de création). Un script sans commentaire est difficile à comprendre pour quelqu'un d'autre — ou pour vous-même, quelques mois plus tard.

Étape 3 — Rendre le script exécutable et le lancer


Bonne pratique - Vérifier ses permissions

Utilisez ls -l infos.sh pour vérifier que le x (exécution) apparaît bien dans les droits du fichier avant de vous demander pourquoi ./infos.sh échoue.

📌 Une solution