Skip to content

Fonctions en Bash

Définir et appeler une fonction

Deux syntaxes équivalentes:

bash
ma_fonction() {
	echo "Bonjour"
}

function ma_fonction {
	echo "Bonjour"
}

ma_fonction  # appel

Convention: 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"   # 5
bash
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é"
fi
bash
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 retour

vrai / faux

En Bash,

  • vrai = code 0
  • faux = 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 return au statut
  • Ne jamais casser "$@" en relai d'arguments

Pratique 💃

  1. Écrire is_dir path qui retourne 0 si path est un dossier, 1 sinon; tester‑la.
bash
is_dir() {
  local path=$1
  [[ -d $path ]]
}
  1. Écrire une fonction hello [nom] qui affiche « Bonjour, NOM! ». Si nom est omis, utiliser « Monde ».
bash
hello() {
	local nom=${1:-"Monde"}
	echo "Bonjour, $nom!"
}

hello "Aminata"
hello
  1. Écrire une fonction abs n qui affiche la valeur absolue de n (entier). Exemple: abs -77. 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
}
  1. Écrire une fonction sum qui additionne tous ses arguments et affiche la somme. Exemple: sum 1 2 36.
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"
}

.