Introduction au scripting Bash
Table des matières
- Qu'est-ce qu'un script Bash ?
- Le shebang
- Créer et exécuter un script
- Arguments de ligne de commande
- Commentaires et documentation
- Exercices pratiques
1 - Qu'est-ce qu'un script Bash ?
Définition
Un script Bash est un fichier texte contenant une séquence de commandes que le shell exécute de manière automatisée.
Avantages du scripting
| Avantage | Description |
|---|---|
| Automatisation | Répéter des tâches sans intervention |
| Reproductibilité | Même résultat à chaque exécution |
| Documentation | Le code documente la procédure |
| Efficacité | Exécution plus rapide qu'à la main |
| Portabilité | Fonctionne sur tous les systèmes Unix |
Cas d'utilisation
- Backups automatisés
- Déploiement d'applications
- Configuration de serveurs
- Monitoring et alertes
- Traitement de fichiers en lot
🔝 Retour à la table des matières
2 - Le shebang
Qu'est-ce que le shebang ?
Le shebang (ou hashbang) est la première ligne d'un script qui indique quel interpréteur utiliser.
#!/bin/bash
Anatomie
#! /bin/bash
│ │
│ └── Chemin vers l'interpréteur
└── Caractères magiques (shebang)
Variantes courantes
| Shebang | Interpréteur |
|---|---|
#!/bin/bash | Bash (chemin fixe) |
#!/usr/bin/env bash | Bash (portable) |
#!/bin/sh | Shell POSIX |
#!/usr/bin/env python3 | Python 3 |
#!/usr/bin/env node | Node.js |
Recommandation
Utilisez #!/usr/bin/env bash pour une meilleure portabilité. env cherche bash dans le PATH.
Importance du shebang
# Sans shebang
cat script.sh | sh # Interprété par sh
./script.sh # Utilise le shell courant
# Avec shebang #!/bin/bash
./script.sh # Toujours interprété par bash
🔝 Retour à la table des matières
3 - Créer et exécuter un script
Créer un script
# 1. Créer le fichier
nano mon_script.sh
# 2. Ajouter le contenu
#!/bin/bash
echo "Hello, World!"
echo "Date: $(date)"
echo "Utilisateur: $USER"
Rendre exécutable
# Ajouter la permission d'exécution
chmod +x mon_script.sh
# Vérifier
ls -l mon_script.sh
# -rwxr-xr-x 1 user user 100 Jan 15 mon_script.sh
Méthodes d'exécution
# 1. Exécution directe (nécessite chmod +x)
./mon_script.sh
# 2. Via l'interpréteur (pas besoin de chmod +x)
bash mon_script.sh
# 3. Avec source (exécute dans le shell courant)
source mon_script.sh
# ou
. mon_script.sh
Différence entre ./script.sh et source script.sh
| Méthode | Environnement | Variables |
|---|---|---|
./script.sh | Nouveau processus | Non héritées |
source script.sh | Shell courant | Héritées |
# Exemple
# script.sh contient: export MA_VAR="test"
./script.sh
echo $MA_VAR # Vide (variable dans sous-shell)
source script.sh
echo $MA_VAR # "test" (variable dans shell courant)
Premier script complet
#!/bin/bash
# Mon premier script
# Auteur: Votre nom
# Date: 2024-01-15
# Afficher un message de bienvenue
echo "==================================="
echo " Bienvenue dans mon script !"
echo "==================================="
# Informations système
echo ""
echo "Informations système :"
echo " - Utilisateur : $USER"
echo " - Répertoire : $(pwd)"
echo " - Date : $(date '+%Y-%m-%d %H:%M')"
echo " - Hostname : $(hostname)"
echo ""
echo "Script terminé avec succès !"
🔝 Retour à la table des matières
4 - Arguments de ligne de commande
Variables spéciales
| Variable | Signification |
|---|---|
$0 | Nom du script |
$1, $2... | Arguments 1, 2... |
$# | Nombre d'arguments |
$@ | Tous les arguments (séparés) |
$* | Tous les arguments (chaîne) |
$$ | PID du script |
$? | Code de retour de la dernière commande |
Exemple
#!/bin/bash
# args_demo.sh
echo "Nom du script : $0"
echo "Premier argument : $1"
echo "Deuxième argument : $2"
echo "Nombre d'arguments : $#"
echo "Tous les arguments : $@"
./args_demo.sh hello world 123
# Nom du script : ./args_demo.sh
# Premier argument : hello
# Deuxième argument : world
# Nombre d'arguments : 3
# Tous les arguments : hello world 123
Vérifier les arguments
#!/bin/bash
# Vérifier qu'on a au moins un argument
if [ $# -eq 0 ]; then
echo "Usage: $0 <nom>"
exit 1
fi
echo "Bonjour, $1 !"
Différence entre $@ et $*
#!/bin/bash
# test_args.sh
echo "Avec \$@:"
for arg in "$@"; do
echo " - '$arg'"
done
echo "Avec \$*:"
for arg in "$*"; do
echo " - '$arg'"
done
./test_args.sh "hello world" "foo bar"
# Avec $@:
# - 'hello world'
# - 'foo bar'
# Avec $*:
# - 'hello world foo bar'
astuce
Utilisez toujours "$@" (avec guillemets) pour préserver les espaces dans les arguments.
🔝 Retour à la table des matières
5 - Commentaires et documentation
Commentaires simples
# Ceci est un commentaire sur une ligne
echo "Hello" # Commentaire en fin de ligne
En-tête de script
#!/bin/bash
#
# Nom: backup.sh
# Description: Script de sauvegarde automatique
# Auteur: Jean Dupont
# Date: 2024-01-15
# Version: 1.0
#
# Usage: ./backup.sh [source] [destination]
#
# Exemples:
# ./backup.sh /var/www /backup
# ./backup.sh ~/Documents /mnt/usb
#
# Code du script...
Documenter les sections
#!/bin/bash
#######################
# Configuration
#######################
BACKUP_DIR="/backup"
LOG_FILE="/var/log/backup.log"
#######################
# Fonctions
#######################
# Fonction: log_message
# Description: Écrit un message dans le fichier de log
# Arguments: $1 - message à logger
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
#######################
# Script principal
#######################
log_message "Démarrage du backup"
# ...
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Premier script
# Créez un script qui affiche :
# - La date actuelle
# - Le nom de l'utilisateur
# - Le répertoire courant
# - L'espace disque disponible
Solution
#!/bin/bash
echo "Date: $(date)"
echo "Utilisateur: $USER"
echo "Répertoire: $(pwd)"
echo "Espace disque:"
df -h / | tail -1
Exercice 2 : Script avec arguments
# Créez un script salut.sh qui prend un nom en argument
# et affiche "Bonjour, [nom] !"
# Si pas d'argument, afficher un message d'erreur
Solution
#!/bin/bash
if [ $# -eq 0 ]; then
echo "Erreur: Veuillez fournir un nom"
echo "Usage: $0 <nom>"
exit 1
fi
echo "Bonjour, $1 !"
Quiz
Q1. Quel est le shebang recommandé pour un script portable ?
Réponse
#!/usr/bin/env bash
Q2. Comment rendre un script exécutable ?
Réponse
chmod +x script.sh
Q3. Que contient la variable $# ?
Réponse
Le nombre d'arguments passés au script
🔝 Retour à la table des matières
Points clés à retenir
- Shebang
#!/bin/bashindique l'interpréteur chmod +xrend le script exécutable$1, $2...= arguments,$#= nombre,$@= tous$?= code de retour de la dernière commande- Toujours commenter et documenter vos scripts
- Utiliser
"$@"avec guillemets pour préserver les espaces