Bash — Centre de Ressources
Présentation
Bash (Bourne Again SHell) est le shell par défaut sur la plupart des distributions Linux. Il permet d’automatiser des tâches système via des scripts, en combinant commandes, variables, structures de contrôle et redirections. Tout script robuste commence par :
#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t'
set -earrête le script en cas d’erreur ·set -uinterdit les variables non définies ·set -o pipefailpropage les erreurs dans les pipes
Fondamentaux
Bases
📦 Basics
Variables, tableaux et manipulation de chaînes.
- Déclaration :
name="val"(pas d’espace autour de=)- Toujours citer :
"$var"ou"${var}"readonly PI=3.14— constante- Manipulation de chaînes :
${name%.txt},${#name}- Tableaux :
arr=("a" "b")→${arr[@]}
Conditions
🔀 Conditions
Tests et branchements conditionnels.
if [[ ... ]]; then ... elif ... else ... fi- Toujours utiliser
[[ ]]plutôt que[ ]- Comparaisons chaînes :
=- Comparaisons entiers :
-eq,-ne,-lt,-le,-gt,-ge- Logique :
&&,||,!
Boucles
🔁 Boucles
Itérer sur des valeurs, des fichiers ou des flux.
for i in 1 2 3; do ... done for file in *.txt; do ... done while read -r line; do ... done < file.txt until ping -c1 host; do sleep 1; done
Structures de contrôle
Case (switch)
🧩 Case (switch)
Remplacer les chaînes de
if/elifpar uncaselisible.case "$1" in start) echo "Start" ;; stop) echo "Stop" ;; *) echo "Usage: start|stop" ;; esac
Fonctions
🧱 Fonctions
Découper un script en blocs réutilisables.
my_func() { local name="$1" # local est CRUCIAL echo "Hello $name" } result=$(my_func "John")
localpour éviter la pollution de l’espace globalreturnpour un code de retour (0–255)echo+$()pour retourner une valeur string
Techniques avancées
Gestion d'erreurs — trap
🧪 Try - Catch en BASH (avec trap)
Bash n’a pas de
try/catchnatif — on simule avectrap.trap 'echo "Erreur ligne $LINENO"; exit 1' ERR set -eOu gestion manuelle :
if ! cp file.txt /tmp/; then echo "Erreur copie" fi
Substitution de commande
🧵 Substitution de commande
Capturer la sortie d’une commande dans une variable.
files=$(ls) today=$(date) count=$(wc -l < fichier.txt)Toujours préférer
$(...)à l’ancienne syntaxe avec backticks.
Rappels essentiels
Variables spéciales
| Variable | Signification |
|---|---|
$0 | Nom du script |
$1 … $9 | Arguments positionnels |
$@ | Tous les arguments (liste) |
$# | Nombre d’arguments |
$? | Code retour de la dernière commande |
$$ | PID du script en cours |
$LINENO | Numéro de ligne courant |
Redirections
| Syntaxe | Signification |
|---|---|
> | Réécrire stdout vers un fichier |
>> | Ajouter stdout à un fichier |
2> | Rediriger stderr |
&> | Rediriger stdout + stderr |
| | Pipeline — passer stdout à la commande suivante |
/dev/null | Supprimer toute sortie |
Structure minimale d'un script robuste
#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' # --- Fonctions --- usage() { echo "Usage: $0 <argument>"; exit 1; } trap 'echo "Erreur ligne $LINENO"; exit 1' ERR # --- Vérification des arguments --- [[ $#--lt-1-| -lt 1 ]] && usage # --- Corps du script --- echo "Argument reçu : $1"
- Déclarer les variables et fonctions → 📦 Basics et 🧱 Fonctions
- Gérer les cas d’erreur avec
trap→ 🧪 Try - Catch en BASH (avec trap)- Tester les conditions et les fichiers → 🔀 Conditions
- Itérer sur les données → 🔁 Boucles
- Dispatcher avec
casepour les menus → 🧩 Case (switch)- Capturer les sorties de commandes → 🧵 Substitution de commande