declare -A CONFIG_ENVIRONNEMENT : cette seule déclaration a remplacé une vingtaine de lignes de conditions répétitives dans un script de déploiement maison, chacune testant le nom de l’environnement cible pour en déduire un chemin de fichier ou une adresse de serveur différente. Ce billet ne traite pas des langages déclaratifs comme YAML, mais d’une amélioration ciblée d’un script bash existant.
Le problème : une cascade de conditions qui grossit à chaque environnement ajouté
Le script initial testait le nom de l’environnement avec une succession de blocs if et elif, chacun fixant plusieurs variables selon le cas. Ajouter un nouvel environnement, par exemple un environnement de recette supplémentaire, demandait de dupliquer un bloc entier, avec le risque d’oublier une variable ou de mal recopier une valeur d’un bloc à l’autre.
if [ "$ENV" = "production" ]; then
HOST="prod.serveur.exemple"
PATH_DEPLOY="/var/www/prod"
elif [ "$ENV" = "staging" ]; then
HOST="staging.serveur.exemple"
PATH_DEPLOY="/var/www/staging"
elif [ "$ENV" = "recette" ]; then
HOST="recette.serveur.exemple"
PATH_DEPLOY="/var/www/recette"
else
echo "Environnement inconnu"
exit 1
fi
La solution : centraliser la configuration dans un tableau associatif

Un tableau associatif Bash permet d’associer une clé à une valeur, comme un dictionnaire. En représentant chaque environnement comme une clé, et en combinant l’hôte et le chemin de déploiement dans une valeur structurée, la configuration entière tient en quelques lignes lisibles d’un seul coup d’œil, sans répétition de la logique conditionnelle.
declare -A HOTES=(
[production]="prod.serveur.exemple"
[staging]="staging.serveur.exemple"
[recette]="recette.serveur.exemple"
)
declare -A CHEMINS=(
[production]="/var/www/prod"
[staging]="/var/www/staging"
[recette]="/var/www/recette"
)
if [[ -z "${HOTES[$ENV]:-}" ]]; then
echo "Environnement inconnu : ${ENV}"
exit 1
fi
HOST="${HOTES[$ENV]}"
PATH_DEPLOY="${CHEMINS[$ENV]}"
Ce que ce changement améliore concrètement
Ajouter un environnement supplémentaire se limite désormais à ajouter une ligne dans chacun des deux tableaux, sans toucher à la logique du script elle-même. La vérification qu’un environnement demandé existe bien devient également une simple vérification de présence de la clé, plus lisible qu’une succession de comparaisons de chaînes de caractères.
- La configuration de chaque environnement est visible en un seul bloc, sans être dispersée dans des conditions successives.
- Le risque d’oubli d’une variable lors de l’ajout d’un environnement diminue fortement.
- La vérification d’un environnement inconnu se fait en une seule condition, au lieu d’un bloc
elsefinal fragile.
Une limite à connaître avant de généraliser cette approche
Les tableaux associatifs ne sont disponibles qu’à partir de Bash 4, une version qui n’est pas installée par défaut sur tous les systèmes, notamment certaines versions de macOS qui embarquent historiquement une version antérieure. Avant de généraliser cette approche sur des scripts partagés entre plusieurs postes de travail d’une équipe, il convient de vérifier la version de Bash réellement disponible sur chaque machine concernée.
bash --version
Un tableau associatif ne remplace pas toute logique conditionnelle, mais il élimine la répétition inutile là où une simple correspondance clé-valeur suffit.
Aller plus loin avec une boucle sur les clés du tableau
Une fois la configuration centralisée dans un tableau associatif, une boucle sur l’ensemble de ses clés permet aussi de valider en une seule fois que chaque environnement déclaré dispose bien d’une valeur cohérente dans les deux tableaux, avant même de lancer un déploiement réel. Cette vérification préalable évite de découvrir une configuration incomplète en pleine opération de déploiement, un moment particulièrement mal choisi pour ce type de découverte.
for env in "${!HOTES[@]}"; do
if [[ -z "${CHEMINS[$env]:-}" ]]; then
echo "Configuration incomplète pour : ${env}"
exit 1
fi
done
echo "Configuration de tous les environnements validée"
En résumé
Remplacer une cascade de conditions répétitives par un tableau associatif Bash rend un script de déploiement plus lisible et plus facile à faire évoluer, à condition de vérifier au préalable que la version de Bash disponible sur chaque poste de l’équipe prend bien en charge cette fonctionnalité.