Aller au contenu principal

Introduction au scripting Bash


Table des matières

  1. Qu'est-ce qu'un script Bash ?
  2. Le shebang
  3. Créer et exécuter un script
  4. Arguments de ligne de commande
  5. Commentaires et documentation
  6. 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

AvantageDescription
AutomatisationRépéter des tâches sans intervention
ReproductibilitéMême résultat à chaque exécution
DocumentationLe 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

ShebangInterpréteur
#!/bin/bashBash (chemin fixe)
#!/usr/bin/env bashBash (portable)
#!/bin/shShell POSIX
#!/usr/bin/env python3Python 3
#!/usr/bin/env nodeNode.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éthodeEnvironnementVariables
./script.shNouveau processusNon héritées
source script.shShell courantHé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

VariableSignification
$0Nom 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/bash indique l'interpréteur
  • chmod +x rend 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

🔝 Retour à la table des matières


Chapitre suivant : Variables et types →