Appearance
Fonctions en Bash
Définir et appeler une fonction
Deux syntaxes équivalentes:
bash
ma_fonction() {
echo "Bonjour"
}
function ma_fonction {
echo "Bonjour"
}
ma_fonction # appelConvention: utiliser des noms explicites en snake_case.
Paramètres d'une fonction
À l'intérieur d'une fonction, on récupère les arguments via $1, $2, …, et "$@". Il n’est pas nécessaire de les déclarer dans la déclaration de la fonction comme en C#
bash
bonjour() {
local nom=${1:-"inconnu"}
echo "Bonjour, $nom!"
}
bonjour "Aminata"
bonjour # -> Bonjour, inconnu!Utilisez toujours "$@" pour relayer des arguments sans les casser, c'est à dire en préservant les espaces:
bash
log_all() {
for a in "$@"; do
printf '[LOG] %s\n' "$a"
done
}Valeurs de retour et sorties
Une fonction peut:
- écrire un résultat sur la sortie standard (capturable avec
$(...)), - fixer un code de retour avec
return N(0 = succès, non‑zéro = erreur). Le code de retour est accessible via$?.
bash
add() {
local a=$1 b=$2
printf '%s' "$(( a + b ))"
}
res=$(add 2 3)
echo "résultat: $res" # 5bash
division() {
local a=$1 b=$2
if [[ $b -eq 0 ]]; then
echo "Erreur: division par zéro" >&2
return 1
fi
printf '%s' "$(( a / b ))"
}
result=$(division 10 2)
if [[ $? -eq 0 ]]; then
echo "Résultat: $result"
else
echo "La division a échoué"
fibash
verif_pair() {
local n=$1
(( n % 2 == 0 ))
}
verif_pair 4 && echo "pair" || echo "impair"
# verif_pair() retourne 0 (succès) si pair, 1 sinon
echo $? # code de retourvrai / faux
En Bash,
vrai= code 0faux= code non‑zéro (ex.: 1)
Remarque: return ne retourne qu'un entier (0..255). Pour des valeurs riches, passez par la sortie standard.
Portée des variables: local vs global
Sans local, une variable assignée dans une fonction fuit dans le scope global.
bash
demo() {
var="globale" # sans local → pollue l'extérieur
}
safe_demo() {
local var="locale" # n'existe que dans la fonction
}Bonne pratique: mettez local pour toute variable interne à une fonction.
Bonnes pratiques
- Une fonction = une responsabilité, nom explicite
- Variables internes en
local, entrées validées, sorties claires - Retourner des données sur stdout; réserver
returnau statut - Ne jamais casser
"$@"en relai d'arguments
Pratique 💃
- Écrire
is_dir pathqui retourne 0 sipathest un dossier, 1 sinon; tester‑la.
bash
is_dir() {
local path=$1
[[ -d $path ]]
}- Écrire une fonction
hello [nom]qui affiche « Bonjour, NOM! ». Sinomest omis, utiliser « Monde ».
bash
hello() {
local nom=${1:-"Monde"}
echo "Bonjour, $nom!"
}
hello "Aminata"
hello- Écrire une fonction
abs nqui affiche la valeur absolue den(entier). Exemple:abs -7→7. Le script doit vérifier que l'argument est un entier.
bash
abs() {
local n=$1
[[ $n =~ ^-?[0-9]+$ ]] || { echo "argument non numérique" >&2; return 2; }
if (( n < 0 )); then
printf '%s\n' "$(( -n ))"
else
printf '%s\n' "$n"
fi
}- Écrire une fonction
sumqui additionne tous ses arguments et affiche la somme. Exemple:sum 1 2 3→6.
bash
sum() {
local total=0
local x
for x in "$@"; do
[[ $x =~ ^-?[0-9]+$ ]] || { echo "non numérique: $x" >&2; return 2; }
total=$(( total + x ))
done
printf '%s\n' "$total"
}