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
- Introduction
- Sommaire
- Qu’est-ce que Bash ?
- Installation et environnement
- Structure d’un script Bash
- Variables et paramètres
- Conditions et tests
- Boucles
- Fonctions Bash
- Gestion des entrées utilisateur
- Gestion des fichiers et répertoires
- Codes de retour et erreurs
- Débogage et diagnostic
- Sécurité et bonnes pratiques
- Synthèse Markdown pour ta fiche bristol
- Fichiers importants
- Bloc de configuration complet
- Commandes utiles et dépannage
- Journaux et supervision
- Erreurs fréquentes
- Cas concrets
- Conclusion
- Pour aller plus loin
- Liens utiles
- 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 :
chmodmodifie les permissions+xajoute le droit d’exécutionscript.shrepré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 :
readattend une saisie-paffiche un message
Mot de passe masqué :
read -s -p "Mot de passe : " mdp
Option :
-smasque 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 :
-xaffiche 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 standard2>&1redirige 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 :
-nvé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 :
-fsuit 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
sedetawkcronsystemd- 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
