Fiche scripts bash, les bases

1. Introduction

Dans un environnement Linux, les scripts Bash permettent d’automatiser des tâches répétitives, d’administrer des serveurs et de gagner énormément de temps. En BTS CIEL ou SIO, tu utilises rapidement Bash pour déployer des services, sauvegarder des fichiers, superviser des machines ou lancer des traitements automatiquement.

Cette fiche t’apprend les bases des scripts Bash sur Debian et Ubuntu. Tu vas découvrir la structure d’un script, les variables, les conditions, les boucles, les fonctions ainsi que les bonnes pratiques de sécurité et de débogage.

L’objectif consiste à devenir capable d’écrire des scripts simples, lisibles et maintenables dans un contexte d’administration système.

2. Sommaire

  1. Introduction
  2. Sommaire
  3. Qu’est-ce que Bash ?
  4. Installation et environnement
  5. Structure d’un script Bash
  6. Variables et paramètres
  7. Conditions et tests
  8. Boucles
  9. Fonctions Bash
  10. Gestion des entrées utilisateur
  11. Gestion des fichiers et répertoires
  12. Codes de retour et erreurs
  13. Débogage et diagnostic
  14. Sécurité et bonnes pratiques
  15. Synthèse Markdown pour ta fiche bristol
  16. Fichiers importants
  17. Bloc de configuration complet
  18. Commandes utiles et dépannage
  19. Journaux et supervision
  20. Erreurs fréquentes
  21. Cas concrets
  22. Conclusion
  23. Pour aller plus loin
  24. Liens utiles
  25. Propositions de TP

3. Qu’est-ce que Bash ?

Bash signifie Bourne Again SHell.

Il s’agit du shell par défaut de nombreuses distributions Linux comme Debian et Ubuntu. Bash interprète des commandes et peut exécuter des scripts contenant des suites d’instructions automatisées.

Un script Bash reste simplement un fichier texte contenant des commandes Linux.

Exemple :

#!/bin/bash

echo "Bonjour"

Le système lit le script ligne par ligne et exécute chaque instruction.

Le #! au début s’appelle le shebang. Il indique quel interpréteur utiliser.

Dans ce cas :

#!/bin/bash

Le système utilise Bash pour exécuter le fichier.

4. Installation et environnement

Sur Debian ou Ubuntu, Bash existe déjà par défaut.

Vérifie sa présence :

bash --version

Cette commande affiche la version installée.

Tu peux aussi vérifier quel shell utilise ton utilisateur :

echo $SHELL

Résultat fréquent :

/bin/bash

5. Structure d’un script Bash

Un script Bash classique contient :

  • un shebang
  • des variables
  • des commandes
  • des conditions
  • des fonctions

Exemple simple :

#!/bin/bash

nom="Etudiant"

echo "Bonjour $nom"

Pour rendre le script exécutable :

chmod +x script.sh

Explication :

  • chmod modifie les permissions
  • +x ajoute le droit d’exécution
  • script.sh représente le fichier

Exécution :

./script.sh

Le ./ indique que le script se trouve dans le répertoire courant.

6. Variables et paramètres

6.1 Déclarer une variable

prenom="Jean"

Attention :

  • aucun espace autour du =
  • Bash considère les espaces comme des séparateurs

Affichage :

echo $prenom

6.2 Variables système

Exemples :

echo $USER
echo $HOME
echo $PATH

6.3 Paramètres positionnels

Un script peut recevoir des arguments :

#!/bin/bash

echo "Premier argument : $1"
echo "Deuxième argument : $2"

Exécution :

./script.sh test admin

Résultat :

Premier argument : test
Deuxième argument : admin

7. Conditions et tests

7.1 Structure if

#!/bin/bash

if [ "$USER" = "root" ]; then
echo "Utilisateur root"
else
echo "Utilisateur standard"
fi

7.2 Vérifier un fichier

if [ -f /etc/passwd ]; then
echo "Le fichier existe"
fi

Options fréquentes :

  • -f : fichier
  • -d : répertoire
  • -r : lecture
  • -w : écriture
  • -x : exécutable

7.3 Comparaisons numériques

if [ "$1" -gt 10 ]; then
echo "Supérieur à 10"
fi

Opérateurs :

  • -eq : égal
  • -ne : différent
  • -gt : supérieur
  • -lt : inférieur

8. Boucles

8.1 Boucle for

for user in alice bob charlie
do
echo "$user"
done

8.2 Boucle while

compteur=1

while [ $compteur -le 5 ]
do
echo $compteur
compteur=$((compteur + 1))
done

8.3 Parcourir des fichiers

for fichier in /var/log/*.log
do
echo "$fichier"
done

9. Fonctions Bash

Les fonctions évitent les répétitions.

#!/bin/bash

bonjour() {
echo "Bonjour $1"
}

bonjour "Alice"

Le $1 représente le premier argument transmis à la fonction.

10. Gestion des entrées utilisateur

Lecture clavier :

read -p "Nom utilisateur : " nom

Explication :

  • read attend une saisie
  • -p affiche un message

Mot de passe masqué :

read -s -p "Mot de passe : " mdp

Option :

  • -s masque la saisie

11. Gestion des fichiers et répertoires

Créer un répertoire :

mkdir sauvegarde

Créer un fichier :

touch test.txt

Copier :

cp fichier.txt sauvegarde/

Déplacer :

mv fichier.txt archive/

Supprimer :

rm fichier.txt

Suppression récursive :

rm -r dossier/

Attention : rm -r supprime définitivement les données.

12. Codes de retour et erreurs

Chaque commande Linux retourne un code.

Vérifie le dernier code :

echo $?

Valeurs :

  • 0 : succès
  • autre valeur : erreur

Exemple :

mkdir test

if [ $? -eq 0 ]; then
echo "Création réussie"
else
echo "Erreur"
fi

13. Débogage et diagnostic

13.1 Mode debug

bash -x script.sh

Option :

  • -x affiche chaque commande exécutée

13.2 Arrêt en cas d’erreur

set -e

Le script s’arrête dès qu’une commande échoue.

13.3 Variables non définies

set -u

Bash signale les variables absentes.

13.4 Journalisation

./script.sh > sortie.log 2>&1

Explication :

  • > redirige la sortie standard
  • 2>&1 redirige les erreurs

14. Sécurité et bonnes pratiques

Ne jamais :

  • exécuter un script inconnu en root
  • faire un rm -rf /
  • stocker des mots de passe en clair
  • donner des permissions 777

Toujours :

  • commenter le code
  • vérifier les variables utilisateur
  • utiliser des chemins absolus
  • tester dans un environnement isolé

Exemple sécurisé :

if [ -d "$dossier" ]; then
rm -r "$dossier"
fi

Les guillemets évitent des comportements dangereux avec les espaces.

15. Synthèse Markdown pour ta fiche bristol

# Bash - Bases

## Créer un script
nano script.sh

## Shebang
#!/bin/bash

## Rendre exécutable
chmod +x script.sh

## Exécuter
./script.sh

## Variables
nom="alice"
echo $nom

## Conditions
if [ -f fichier.txt ]; then
echo "Existe"
fi

## Boucles
for i in 1 2 3
do
echo $i
done

## Lire une saisie
read -p "Nom : " nom

## Debug
bash -x script.sh

## Code retour
echo $?

## Redirection logs
./script.sh > sortie.log 2>&1

16. Fichiers importants

/etc/profile
/etc/bash.bashrc
~/.bashrc
~/.profile
/usr/bin/bash
/var/log/syslog
/var/log/auth.log

Arborescence utile :

/home/user/scripts/
├── sauvegarde.sh
├── supervision.sh
└── maintenance.sh

17. Bloc de configuration complet

#!/bin/bash

# ============================================================================
# Script : sauvegarde.sh
# Description : sauvegarde automatique d'un répertoire
# Auteur : Breizh Sec Ops
# ============================================================================

set -euo pipefail

SOURCE="/home/user/documents"
DESTINATION="/srv/backup"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE="backup_${DATE}.tar.gz"
LOGFILE="/var/log/sauvegarde.log"

if [ ! -d "$SOURCE" ]; then
echo "[ERREUR] Source introuvable : $SOURCE" | tee -a "$LOGFILE"
exit 1
fi

mkdir -p "$DESTINATION"

tar -czf "$DESTINATION/$ARCHIVE" "$SOURCE"

if [ $? -eq 0 ]; then
echo "[OK] Sauvegarde créée : $ARCHIVE" | tee -a "$LOGFILE"
else
echo "[ERREUR] Echec sauvegarde" | tee -a "$LOGFILE"
fi

18. Commandes utiles et dépannage

Afficher les permissions :

ls -l script.sh

Tester la syntaxe :

bash -n script.sh

Option :

  • -n vérifie la syntaxe sans exécuter

Trouver Bash :

which bash

Chercher un binaire :

whereis bash

Chercher une commande dans le PATH :

type ls

Afficher les processus :

ps aux | grep script.sh

Tuer un script :

kill PID

Rendre tous les scripts exécutables :

chmod +x *.sh

19. Journaux et supervision

Bash ne possède pas ses propres logs système.

Tu utilises généralement :

/var/log/syslog
/var/log/auth.log

Consulter les logs :

tail -f /var/log/syslog

Option :

  • -f suit les nouvelles lignes en temps réel

Voir les erreurs sudo :

tail -f /var/log/auth.log

Créer un log personnalisé :

echo "Message" >> /var/log/script.log

Journaliser avec logger :

logger "Script sauvegarde exécuté"

Consulter ensuite :

journalctl -t root

20. Erreurs fréquentes

Permission denied

Cause :

  • script non exécutable

Correction :

chmod +x script.sh

bad interpreter

Cause :

  • mauvais shebang
  • retour Windows CRLF

Correction :

dos2unix script.sh

command not found

Cause :

  • commande absente
  • PATH incorrect

Diagnostic :

echo $PATH

21. Cas concrets

Sauvegarde automatique

Créer une archive chaque nuit avec cron.

Supervision serveur

Vérifier qu’Apache fonctionne :

systemctl is-active apache2

Déploiement

Installer automatiquement plusieurs paquets :

apt update && apt install -y nginx mariadb-server

Rotation de logs

Supprimer les anciens fichiers :

find /backup -type f -mtime +30 -delete

22. Conclusion

Les scripts Bash constituent une compétence essentielle en administration Linux. Même des scripts simples permettent déjà d’automatiser des sauvegardes, des vérifications ou des installations.

Lorsque tu écris un script, pense toujours à :

  • vérifier les erreurs
  • protéger les variables
  • journaliser les actions
  • limiter les privilèges
  • commenter correctement le code

Un bon script reste lisible, maintenable et sécurisé.

23. Pour aller plus loin

Approfondis ensuite :

  • les expressions régulières
  • sed et awk
  • cron
  • systemd
  • les scripts de déploiement
  • l’automatisation Ansible
  • les pipelines CI/CD

Tu peux également découvrir :

  • Zsh
  • Dash
  • Fish
  • PowerShell sous Linux

24. Liens utiles

Documentation officielle Bash GNU :
https://www.gnu.org/software/bash/manual/bash.html
Référence officielle complète du shell Bash.

Documentation Debian Bash :
https://wiki.debian.org/Bash
Documentation Debian adaptée à l’administration système.

OpenClassrooms – Découvrez la ligne de commande dans un terminal :
https://openclassrooms.com/fr/courses/7170491-initiez-vous-a-linux
Très bon cours d’introduction Linux pour débuter.

OpenClassrooms – Administrez un système Linux :
https://openclassrooms.com/fr/courses/7274161-administrez-un-systeme-linux
Approche pédagogique orientée administration système.

Explainshell :
https://explainshell.com/
Décompose chaque option d’une commande Linux.

TLDR Linux :
https://tldr.sh/
Exemples rapides de commandes Linux.

Documentation Ubuntu Bash :
https://help.ubuntu.com/community/Beginners/BashScripting
Documentation communautaire Ubuntu très pédagogique.

25. Propositions de TP

TP 1 — Script de sauvegarde

Objectif :

  • sauvegarder un répertoire
  • créer une archive compressée
  • écrire des logs

TP 2 — Supervision d’un service

Objectif :

  • vérifier Apache ou SSH
  • envoyer un message en cas d’arrêt

TP 3 — Gestion utilisateurs

Objectif :

  • créer automatiquement plusieurs utilisateurs
  • générer des mots de passe
  • créer leurs répertoires

TP 4 — Nettoyage automatique

Objectif :

  • supprimer les fichiers temporaires
  • nettoyer les logs anciens
  • planifier le script avec cron

TP 5 — Script interactif

Objectif :

  • créer un menu Bash
  • utiliser case
  • gérer plusieurs actions système
Retour en haut