đŸ§© Tableaux, dictionnaires et structures avancĂ©es en Bash - Part 4
đŸ§© Tableaux, dictionnaires et structures avancĂ©es en Bash - Part 4

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éfinitionExemple / Code pratique
Déclaration simplefruits=("pomme" "banane" "kiwi")
AccĂ©der Ă  un Ă©lĂ©mentecho ${fruits[1]} → banane
Taille du tableauecho ${#fruits[@]}
Ajouter un élémentfruits+=("fraise")
Supprimer un élémentunset fruits[2]
Boucle sur tous les élémentsfor 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éfinitionExemple / Code pratique
Création du dictionnairedeclare -A serveurs
Ajout d’une valeurserveurs["web01"]="online"
Lecture d’une valeurecho ${serveurs["web01"]}
Parcourir les clésfor 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 :

ActionExemple
Concaténer deux tableauxall=("${A[@]}" "${B[@]}")
Extraire une partie (slicing)part=("${all[@]:1:3}")
Transformer une chaĂźne en tableauIFS=',' read -ra items <<< "$chaine"
Lire un fichier dans un tableaumapfile -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 :

L’idĂ©al est de les suivre dans cet ordre pour consolider tes compĂ©tences.


9. Solutions des exercices

đŸ§© Tableaux, dictionnaires et structures avancĂ©es en Bash - Part 4

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
Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

    Alors tu en pense quoi de cette article ? Dis-moi tous..