Bash Scripting : Guide Pratique
Pourquoi Bash scripting : guide pratique ?
Dans un environnement professionnel, le scriptage en Bash est une compétence précieuse. Il permet d'automatiser des tâches répétitives, de gérer les systèmes d'exploitation et de développer des outils utilitaires. Un cas concret pourrait être la création d'un script qui sauvegarde automatiquement les fichiers importantes sur un serveur.
Prerequis
- Connaissance de base en programmation (variables, conditions, boucles)
- Installation de Bash (généralement pré-installé sur Linux et macOS)
Concepts fondamentaux
Variables et Types de Données
Les variables en Bash sont utilisées pour stocker des valeurs qui peuvent être manipulées par des commandes. Elles sont déclarées en utilisant le signe =.
## Déclaration d'une variable
nom="John"
âge=30
## Utilisation de la variable dans un message
echo "Mon nom est $nom et j'ai $âge ans."
Conditions
Les conditions permettent d'exécuter des commandes conditionnelles en fonction de certaines conditions.
## Exemple de condition if-else
if [ "$âge" -gt 18 ]; then
echo "Je suis majeur."
else
echo "Je suis mineur."
fi
Boucles
Les boucles sont utilisées pour répéter un ensemble d'instructions.
## Exemple de boucle for
for i in 1 2 3 4 5; do
echo $i
done
## Exemple de boucle while
count=0
while [ $count -lt 5 ]; do
echo "Le compteur est à $count"
count=$((count+1))
done
Fonctions
Les fonctions permettent de regrouper des commandes pour les réutiliser plus tard.
## Déclaration et appel d'une fonction
function saluer {
nom=$1
echo "Bonjour, $nom !"
}
saluer "Alice"
Mise en pratique : projet fil rouge
Mini-Projet : Un Gestionnaire de Tâches
Ce script permettra de créer, lire, mettre à jour et supprimer des tâches.
#!/bin/bash
## Déclaration d'un tableau pour stocker les tâches
taches=()
## Fonction pour ajouter une tâche
ajouter_tache() {
echo "Ajoutez une nouvelle tâche :"
read nouvelle_tache
taches+=("$nouvelle_tache")
}
## Fonction pour afficher toutes les tâches
afficher_taches() {
echo "Liste des tâches :"
for i in "${!taches[@]}"; do
echo "$i: ${taches[$i]}"
done
}
## Fonction pour mettre à jour une tâche
mettre_a_jour_tache() {
afficher_taches
echo "Entrez l'index de la tâche à modifier :"
read index
if [[ $index =~ ^[0-9]+$ ]] && [ $index -lt ${#taches[@]} ]; then
echo "Nouvelle tâche :"
read nouvelle_tache
taches[$index]="$nouvelle_tache"
else
echo "Index invalide."
fi
}
## Fonction pour supprimer une tâche
supprimer_tache() {
afficher_taches
echo "Entrez l'index de la tâche à supprimer :"
read index
if [[ $index =~ ^[0-9]+$ ]] && [ $index -lt ${#taches[@]} ]; then
unset taches[$index]
# Réorganiser les indices
taches=("${taches[@]}")
else
echo "Index invalide."
fi
}
## Menu principal
while true; do
echo "1. Ajouter une tâche"
echo "2. Afficher toutes les tâches"
echo "3. Mettre à jour une tâche"
echo "4. Supprimer une tâche"
echo "5. Quitter"
read choix
case $choix in
1) ajouter_tache ;;
2) afficher_taches ;;
3) mettre_a_jour_tache ;;
4) supprimer_tache ;;
5) break ;;
*) echo "Choix invalide." ;;
esac
done
Étapes du Projet
- Initialisation des variables et tableau :
taches=()
- Fonction pour ajouter une tâche :
function ajouter_tache {
echo "Ajoutez une nouvelle tâche :"
read nouvelle_tache
taches+=("$nouvelle_tache")
}
- Fonction pour afficher toutes les tâches :
function afficher_taches {
echo "Liste des tâches :"
for i in "${!taches[@]}"; do
echo "$i: ${taches[$i]}"
done
}
- Fonction pour mettre à jour une tâche :
function mettre_a_jour_tache {
afficher_taches
echo "Entrez l'index de la tâche à modifier :"
read index
if [[ $index =~ ^[0-9]+$ ]] && [ $index -lt ${#taches[@]} ]; then
echo "Nouvelle tâche :"
read nouvelle_tache
taches[$index]="$nouvelle_tache"
else
echo "Index invalide."
fi
}
- Fonction pour supprimer une tâche :
function supprimer_tache {
afficher_taches
echo "Entrez l'index de la tâche à supprimer :"
read index
if [[ $index =~ ^[0-9]+$ ]] && [ $index -lt ${#taches[@]} ]; then
unset taches[$index]
taches=("${taches[@]}")
else
echo "Index invalide."
fi
}
- Menu principal :
while true; do
echo "1. Ajouter une tâche"
echo "2. Afficher toutes les tâches"
echo "3. Mettre à jour une tâche"
echo "4. Supprimer une tâche"
echo "5. Quitter"
read choix
case $choix in
1) ajouter_tache ;;
2) afficher_taches ;;
3) mettre_a_jour_tache ;;
4) supprimer_tache ;;
5) break ;;
*) echo "Choix invalide." ;;
esac
done
Erreurs frequentes et debugging
1. Erreur : Commande inconnue
Message d'erreur :
command not found: echo
Code incorrect :
echo = "Hello, World!"
Code correct :
echo "Hello, World!"
2. Erreur : Variable non définie
Message d'erreur :
bash: name: command not found
Code incorrect :
name="John"
echo $name
Code correct :
name="John"
echo "$name"
3. Erreur : Syntaxe Incorrecte des Conditions
Message d'erreur :
bash: [[: not found
Code incorrect :
if [ "a" = "b" ]; then
echo "Equal"
fi
Code correct :
if [ "$a" == "$b" ]; then
echo "Equal"
fi
Pour aller plus loin
1. Utiliser des fichiers de configuration
En utilisant des fichiers .conf, vous pouvez externaliser les paramètres et rendre votre script plus flexible.
2. Gérer les entrées d'utilisateur avec read
La commande read permet de lire l'entrée utilisateur, ce qui est utile pour créer des interfaces interactives.
3. Utiliser des fonctions pour organiser le code
Diviser le code en fonctions permet de le rendre plus modulaire et facilement maintenable.
Défi pratique
Créez un script qui permet de gérer une liste de contacts avec les options d'ajouter, de consulter et de supprimer des contacts. Utilisez des fichiers pour stocker les données et des fonctions pour chaque opération.
Ce tutoriel couvre les concepts fondamentaux du scripting Bash et guide le lecteur à travers la création d'un mini-projet complet. Il met en pratique les connaissances acquises et aide à comprendre comment automatiser des tâches grâce au scripting Bash.