Introduction
Les tableaux Bash sont bien plus puissants quâils nâen ont lâair.
Ils permettent de manipuler des ensembles de donnĂ©es, de crĂ©er des âfausses structuresâ (comme des objets), et mĂȘme dâorganiser ton code comme de petits modules rĂ©utilisables.
Si tu cherches à écrire des scripts plus dynamiques et lisibles, ce chapitre est un passage obligé.
1. Les bases des tableaux Bash
| Concept / Définition | Exemple / Code pratique |
|---|---|
| Déclaration simple | fruits=("pomme" "banane" "kiwi") |
| AccĂ©der Ă un Ă©lĂ©ment | echo ${fruits[1]} â banane |
| Taille du tableau | echo ${#fruits[@]} |
| Ajouter un élément | fruits+=("fraise") |
| Supprimer un élément | unset fruits[2] |
| Boucle sur tous les éléments | for f in "${fruits[@]}"; do echo "$f"; done |
đĄ Astuce : utilise toujours des guillemets autour de ${fruits[@]} pour Ă©viter les erreurs si un Ă©lĂ©ment contient des espaces.
2. Les dictionnaires (tableaux associatifs)
Les tableaux associatifs permettent de stocker des paires clé/valeur, comme un mini dictionnaire.
| Concept / Définition | Exemple / Code pratique |
|---|---|
| Création du dictionnaire | declare -A serveurs |
| Ajout dâune valeur | serveurs["web01"]="online" |
| Lecture dâune valeur | echo ${serveurs["web01"]} |
| Parcourir les clés | for k in "${!serveurs[@]}"; do echo "$k"; done |
| Tester une clé | [ -n "${serveurs["db01"]+set}" ] && echo "existe" |
Exemple concret :
declare -A etudiants
etudiants["Lucas"]="17"
etudiants["Marie"]="19"
etudiants["Yanis"]="15"
for nom in "${!etudiants[@]}"; do
echo "$nom a obtenu ${etudiants[$nom]}/20"
done
3. Manipuler et transformer les données
Quelques manipulations utiles :
| Action | Exemple |
|---|---|
| Concaténer deux tableaux | all=("${A[@]}" "${B[@]}") |
| Extraire une partie (slicing) | part=("${all[@]:1:3}") |
| Transformer une chaĂźne en tableau | IFS=',' read -ra items <<< "$chaine" |
| Lire un fichier dans un tableau | mapfile -t lignes < fichier.txt |
đŹ Exemple pratique :
mapfile -t users < /etc/passwd
echo "Le premier utilisateur est : ${users[0]}"
4. Modularité et réutilisation de code
Un bon script Bash peut ĂȘtre dĂ©coupĂ© en modules.
Fichier utils.sh :
function log_info() {
echo "[INFO] $1"
}
function log_error() {
echo "[ERREUR] $1" >&2
}
Fichier principal main.sh :
#!/bin/bash
source ./utils.sh
log_info "Démarrage du script..."
# Ton code ici
log_error "Quelque chose sâest mal passĂ© !"
â Avantage : ton code devient plus clair, maintenable et rĂ©utilisable dans dâautres projets.
5. Simuler des structures et objets
Bash ne connaßt pas les classes, mais on peut simuler des structures de données.
Exemple : un âobjetâ utilisateur stockĂ© dans un dictionnaire.
declare -A user=(
[nom]="Alice"
[email]="alice@example.com"
[role]="admin"
)
function afficher_user() {
local -n ref=$1
echo "${ref[nom]} (${ref[email]}) - RĂŽle : ${ref[role]}"
}
afficher_user user
đ local -n crĂ©e une rĂ©fĂ©rence vers un autre tableau associatif.
Câest la base pour simuler un comportement âobjetâ.
6. Mini-projet pratique (MCO)
Le but : crĂ©er un script qui gĂšre lâĂ©tat de plusieurs services.
#!/bin/bash
declare -A services=(
[nginx]="running"
[mysql]="stopped"
[ssh]="running"
)
function rapport_services() {
echo "Rapport des services :"
for s in "${!services[@]}"; do
echo "- $s : ${services[$s]}"
done
}
rapport_services
đĄ Tu peux aller plus loin :
- Ajouter une fonction pour changer un statut.
- Générer un rapport dans un fichier CSV.
7. Exercices pratiques
| đ§ Exercice 1 Fusionner deux tableaux de serveurs sans doublons | đ§ Exercice 2 CrĂ©er un dictionnaire dâutilisateurs et afficher leurs rĂŽles |
| đ§ Exercice 3 Lire un fichier .env dans un tableau associatif | đ§ Exercice 4 Construire un mini âmenu CLIâ avec des fonctions modulaires |
8. Conclusion
Tu maĂźtrises maintenant :
- Les tableaux indexés et associatifs
- Les manipulations de données (concaténation, slicing, mapfile)
- La modularité de ton code
- Et mĂȘme la crĂ©ation de pseudo-objets Bash
Prochaine Ă©tape : automatiser la gestion dâerreurs et de logs pour rendre tes scripts encore plus robustes.
Et toi, comment structures-tu tes données en Bash ? Partage ton expérience en commentaire !
đ Liens internes Ă intĂ©grer (section Ă insĂ©rer aprĂšs lâintroduction)
đ§ Pour aller plus loin avant ou aprĂšs ce projet :
Avant de plonger dans les tableaux et structures, jette un Ćil Ă ces articles complĂ©mentaires :
- đ§ Bases du scripting Bash â comprendre le shebang, les variables et la structure dâun script.
- âïž Variables et opĂ©rateurs en Bash â tout sur les variables spĂ©ciales, dâenvironnement et les opĂ©rateurs.
- đ Boucles et conditions en Bash â la logique rĂ©pĂ©titive : for, while, if, case.
LâidĂ©al est de les suivre dans cet ordre pour consolider tes compĂ©tences.
9. Solutions des exercices

Exercice 1 â Fusion de tableaux
A=("web1" "web2")
B=("web2" "db1")
fusion=($(printf "%s\n" "${A[@]}" "${B[@]}" | sort -u))
echo "${fusion[@]}"
Exercice 2 â Dictionnaire dâutilisateurs
declare -A users=( ["alice"]="admin" ["bob"]="guest" )
for u in "${!users[@]}"; do
echo "$u => ${users[$u]}"
done
Exercice 3 â Lire un fichier .env
declare -A envvars
while IFS='=' read -r k v; do
[[ -z "$k" || "$k" == \#* ]] && continue
envvars["$k"]="$v"
done < .env
Exercice 4 â Menu CLI modulaire
source ./utils.sh
declare -A actions=( ["1"]="Lister" ["2"]="Ajouter" ["3"]="Quitter" )
echo "=== Menu ==="
for k in "${!actions[@]}"; do
echo "$k) ${actions[$k]}"
done
