Chapitre 6.3 - Structures de Contrôle
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Utiliser les conditions if/else
- Implémenter des boucles for et while
- Utiliser case pour sélection multiple
- Comprendre les opérateurs de test
- Gérer les erreurs
Conditions if/else
Syntaxe de Base
#!/bin/bash
# if simple
if [ condition ]; then
commandes
fi
# if/else
if [ condition ]; then
commandes_si_vrai
else
commandes_si_faux
fi
# if/elif/else
if [ condition1 ]; then
commandes1
elif [ condition2 ]; then
commandes2
else
commandes3
fi
Opérateurs de Test
Fichiers:
[ -f fichier ] # Fichier existe et est régulier
[ -d repertoire ] # Répertoire existe
[ -e chemin ] # Chemin existe
[ -r fichier ] # Lisible
[ -w fichier ] # Écriture
[ -x fichier ] # Exécutable
[ -s fichier ] # Non vide
Chaînes:
[ -z "$VAR" ] # Vide
[ -n "$VAR" ] # Non vide
[ "$VAR1" = "$VAR2" ] # Égal
[ "$VAR1" != "$VAR2" ] # Différent
Nombres:
[ $A -eq $B ] # Égal
[ $A -ne $B ] # Différent
[ $A -lt $B ] # Inférieur
[ $A -le $B ] # Inférieur ou égal
[ $A -gt $B ] # Supérieur
[ $A -ge $B ] # Supérieur ou égal
Logique:
[ condition1 ] && [ condition2 ] # ET
[ condition1 ] || [ condition2 ] # OU
[ ! condition ] # NON
Exemples
#!/bin/bash
# Vérifier fichier
if [ -f "/etc/passwd" ]; then
echo "Fichier existe"
else
echo "Fichier n'existe pas"
fi
# Vérifier utilisateur
if [ "$USER" = "root" ]; then
echo "Vous êtes root"
elif [ "$UID" -eq 0 ]; then
echo "Vous êtes root (par UID)"
else
echo "Vous êtes $USER"
fi
# Conditions multiples
if [ -f "$1" ] && [ -r "$1" ]; then
echo "Fichier existe et est lisible"
fi
Boucle for
Syntaxe
#!/bin/bash
# Liste de valeurs
for item in valeur1 valeur2 valeur3; do
echo "Item: $item"
done
# Parcourir arguments
for arg in "$@"; do
echo "Argument: $arg"
done
# Séquence numérique
for i in {1..10}; do
echo "Nombre: $i"
done
# Avec incrément
for i in {1..10..2}; do
echo "Nombre: $i"
done
# Style C
for ((i=1; i<=10; i++)); do
echo "Nombre: $i"
done
Exemples
#!/bin/bash
# Parcourir fichiers
for fichier in *.txt; do
echo "Traitement: $fichier"
# Traitement...
done
# Parcourir répertoires
for dir in /home/*; do
if [ -d "$dir" ]; then
echo "Répertoire: $dir"
fi
done
# Parcourir tableau
FRUITS=("pomme" "banane" "orange")
for fruit in "${FRUITS[@]}"; do
echo "Fruit: $fruit"
done
Boucle while
Syntaxe
#!/bin/bash
# while simple
while [ condition ]; do
commandes
done
# while avec lecture
while read ligne; do
echo "Ligne: $ligne"
done < fichier.txt
# while infini
while true; do
commandes
sleep 1
done
Exemples
#!/bin/bash
# Compteur
i=1
while [ $i -le 10 ]; do
echo "Nombre: $i"
i=$((i + 1))
done
# Lire fichier ligne par ligne
while IFS= read -r ligne; do
echo "Ligne: $ligne"
done < /etc/passwd
# Menu interactif
while true; do
echo "1. Option 1"
echo "2. Option 2"
echo "3. Quitter"
read -p "Choix: " choix
case $choix in
1) echo "Option 1" ;;
2) echo "Option 2" ;;
3) break ;;
*) echo "Choix invalide" ;;
esac
done
Boucle until
#!/bin/bash
# until (jusqu'à ce que condition vraie)
i=1
until [ $i -gt 10 ]; do
echo "Nombre: $i"
i=$((i + 1))
done
case - Sélection Multiple
Syntaxe
#!/bin/bash
case $variable in
pattern1)
commandes1
;;
pattern2)
commandes2
;;
pattern3|pattern4)
commandes3
;;
*)
commandes_par_defaut
;;
esac
Exemples
#!/bin/bash
# Menu simple
read -p "Choix (1-3): " choix
case $choix in
1)
echo "Option 1 sélectionnée"
;;
2)
echo "Option 2 sélectionnée"
;;
3)
echo "Option 3 sélectionnée"
;;
*)
echo "Choix invalide"
exit 1
;;
esac
# Patterns avec wildcards
case "$1" in
start)
echo "Démarrage"
;;
stop)
echo "Arrêt"
;;
restart|reload)
echo "Redémarrage"
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
Contrôle de Flux
break et continue
#!/bin/bash
# break: Sortir de la boucle
for i in {1..10}; do
if [ $i -eq 5 ]; then
break
fi
echo $i
done
# continue: Passer à l'itération suivante
for i in {1..10}; do
if [ $i -eq 5 ]; then
continue
fi
echo $i
done
exit
#!/bin/bash
# exit: Quitter le script
if [ ! -f "$1" ]; then
echo "Erreur: Fichier non trouvé"
exit 1
fi
# Code de retour
exit 0 # Succès
exit 1 # Erreur générale
exit 2 # Erreur spécifique
Exemple Complet
#!/bin/bash
# Script de traitement de fichiers
# Vérifier arguments
if [ $# -eq 0 ]; then
echo "Usage: $0 FICHIER..."
exit 1
fi
# Traiter chaque fichier
for fichier in "$@"; do
# Vérifier existence
if [ ! -f "$fichier" ]; then
echo "Avertissement: $fichier n'existe pas, ignoré"
continue
fi
# Vérifier permissions
if [ ! -r "$fichier" ]; then
echo "Erreur: $fichier n'est pas lisible"
continue
fi
# Traitement selon extension
case "$fichier" in
*.txt)
echo "Traitement texte: $fichier"
# Traitement...
;;
*.log)
echo "Traitement log: $fichier"
# Traitement...
;;
*)
echo "Type non supporté: $fichier"
;;
esac
done
echo "Traitement terminé"
Résumé
Dans ce chapitre, vous avez appris:
if/else: Conditions avec opérateurs de test
for: Boucles avec listes, séquences, tableaux
while: Boucles conditionnelles, lecture fichiers
case: Sélection multiple avec patterns
Contrôle: break, continue, exit
Opérateurs: Fichiers, chaînes, nombres, logique
Prochaines Étapes
Chapitre 6.4: Fonctions et Cron
Module 7: Réseau et Configuration
Chapitre créé le: Décembre 2024