Maitriser les fonctions en Bash
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment créer des fonctions dans le langage de script Bash, ce qui va permettre d'optimiser le code de vos scripts.
Que vous soyez un utilisateur Linux curieux ou un futur administrateur système, les fonctions vont vous aider à :
- Éviter de répéter le même code plusieurs fois.
- Rendre vos scripts plus clairs et plus faciles à comprendre.
- Automatiser des tâches complexes en les découpant en petites étapes simples.
Il s'agit d'un élément à connaitre pour écrire des scripts Bash efficaces et complets. Les fonctions Bash sont simples à déclarer et à utiliser, c'est ce que nous allons voir ici.
Version originale de l'article : 25 avril 2013.
II. Qu’est-ce qu’une fonction en Bash ?
Une fonction est un bloc de code auquel vous donnez un nom. Quand vous appelez ce nom dans votre script, Bash exécute toutes les commandes du bloc, comme si vous aviez tapé chacune d’elles une par une.
Imaginez que vous écrivez une recette de cuisine. Au lieu de répéter à chaque fois "préchauffez le four à 180°C, beurrez un moule, cassez 3 œufs...", vous pourriez écrire une seule fois "Préparer la base d’un gâteau" et simplement faire référence à cette étape chaque fois que vous en avez besoin. En programmation (Bash, mais pas uniquement), les fonctions jouent exactement ce rôle : elles vous permettent de regrouper plusieurs commandes sous un seul nom, pour les réutiliser facilement sans tout réécrire à chaque fois.
Exemple du quotidien : si vous devez souvent créer un dossier, y entrer, et créer un fichier dedans, vous pourriez écrire une fonction creer_projet qui fait tout ça en une seule commande.
III. Comment créer une fonction en Bash ?
A. La syntaxe de base
La façon la plus courante pour créer une fonction en Bash est la suivante :
nom_de_ma_fonction() {
# Ici, vous mettez toutes les commandes que vous voulez regrouper
echo "Bonjour, je suis une fonction !"
}
Dans ce bout de script Bash, j'ai mis en avant plusieurs éléments concernant notre fonction :
- en orange : c’est le nom que vous donnez à votre fonction. Choisissez un nom clair, comme
creer_dossierousauvegarder_fichier. - en rouge : les parenthèses
(), elles indiquent que c’est une fonction. - En vert : les accolades
{ }, tout ce qui est entre les accolades fait partie de la fonction.
Voici un exemple plus concret :
dire_bonjour() {
echo "Bonjour à tous !"
echo "Bienvenue dans mon script Bash."
}
Pour utiliser (ou "appeler") cette fonction, il suffit d’écrire son nom dans votre script :
dire_bonjour
# Résultat
Bonjour à tous !
Bienvenue dans mon script Bash.
B. Où placer les fonctions dans un script ?
En Bash, vous devez définir une fonction avant de l’utiliser. Pour vous souvenir de cet ordre, dites-vous que vous devez d'abord écrire la recette avant que quelqu'un d'autre puisse la suivre. Voici un exemple de script plus complet intégrant une fonction, puis son utilisation :
#!/bin/bash
# Définition de la fonction
dire_bonjour() {
echo "Bonjour à tous !"
echo "Bienvenue dans mon script Bash."
}
# Appel de la fonction
dire_bonjour
Si vous mettez l’appel dire_bonjour avant la définition de la fonction, Bash ne saura pas de quoi vous parlez et affichera une erreur telle que celle-ci
dire_aurevoir : commande introuvable
III. Passer des informations à une fonction : les arguments
Les fonctions peuvent recevoir des arguments, c’est-à-dire des informations que vous leur passez pour qu’elles les utilisent. Cela permet de rendre nos fonctions plus dynamiques et de faire en sorte qu'elles soient vraiment utiles. Par exemple, une fonction saluer pourrait prendre un prénom en argument et dire bonjour à cette personne.
Quand vous appelez une fonction, vous pouvez lui passer des arguments, séparés par des espaces :
# Utilisation d'une fonction avec arguments
saluer Alice Bob
À l’intérieur de la fonction, vous accédez aux arguments avec $1, $2, $3, etc. :
$1: Premier argument (Alice).$2: Deuxième argument (Bob).$@: Tous les arguments.$#: Le nombre d’arguments.
Exemple :
# Déclaration d'une fonction utilisant des arguments
saluer() {
echo "Bonjour, $1 !"
echo "Bonjour, $2 !"
}
# Appel de la fonction avec 2 arguments
saluer Alice Bob
# Résultat
Bonjour, Alice !
Bonjour, Bob !
Bien entendu, il faut penser à écrire un code robuste qui vérifie bien qu'un argument a été passé avant de l'utiliser. Sinon, vous vous retrouvez avec des erreurs :
saluer() {
# Condition pour vérifier la présence d'un argument
if [[ -z "$1" ]]; then
echo "Erreur : vous devez préciser un prénom !"
return 1 # Quitte la fonction avec un code d'erreur
fi
echo "Bonjour, $1 !"
}
saluer # Oublie de préciser le prénom
# Résultat
Erreur : vous devez préciser un prénom !
IV. Variables locales vs variables globales
En Bash, les variables sont globales par défaut : elles existent dans tout le script. Mais vous pouvez les rendre locales à une fonction avec le mot-clé local.
A. Variables globales
Dans l'exemple suivant, nous déclarons une variable à l'intérieur d'une fonction, puis la réutilisons en dehors de celle-ci.
ma_fonction() {
ma_variable="Je suis globale"
}
ma_fonction
echo "$ma_variable"
# Résultat
Je suis globale
B. Variables locales
Une fonction locale ne va, elle, exister qu'à l'intérieur de la fonction au sein de laquelle elle est déclarée, et non en dehors.
ma_fonction() {
local ma_variable="Je suis locale"
}
ma_fonction
echo "$ma_variable"
# N'affiche rien, car la variable n'existe pas en dehors de la fonction
L'utilisation de variables locales est à connaitre, car il est probable que vous en ayez besoin pour les raisons suivantes :
- Pour éviter que vos variables ne se mélangent entre elles.
- Pour rendre votre code plus clair et plus facile à déboguer
V. Conclusion
Les fonctions sont un outil puissant pour rendre vos scripts Bash plus clairs, plus modulaires et plus faciles à maintenir. Il y aurait beaucoup à dire sur ces dernières et le langage de scripting Bash. Pour vous entrainer, voici quelques idées de fonctions Bash à développer :
- Automatisez la création de dossiers pour vos projets (ex :
creer_projet web mon_site) - Créez une fonction qui liste tous les fichiers d’un dossier dont l’extension est
.txt. - Écrivez une fonction qui sauvegarde un fichier en ajoutant la date du jour à son nom.
Enfin, n'hésitez pas à consulter l'ensemble de nos tutoriels sur le scripting Bash :


Une fonction peut être placée n’importe où dans le script, au début comme à la fin, avant comme après son appel.
Correction : Une fonction peut être placée au début ou à la fin du script mais IMPÉRATIVEMENT AVANT son appel!
peut on créer une librairie de fonctions que l’on partagerait entre les différents script bash