Bash : Fonctions
Généralités
Utilisation
Une définition de fonction peut se trouver n'importe où dans un script BASH. La seule restriction est que cette définition soit faite avant son appel.
#!/bin/bash # Déclaration de la fonction function maFonction { # [corps de la fonction] } ... ... # Appel de la fonction après sa définition maFonction
L'éxecution d'une fonction se fait dans l'environnement courant, autorisant ainsi le partage de variables. L'initialisation des variables doit se faire avant l'appel.
#!/bin/bash # Définition d'une variable dans l'environnement courant stMessage1="Bonjour" function fctBonjourQui { # Évaluation des variables echo $stMessage1 $stMessage2 $stMessage3 } # Définition d'une variable après la définition mais avant l'appel stMessage2="tout" # Appel de la fonction fctBonjourQui # Définition d'une variable après l'appel stMessage3="le monde"
Si j'exécute ce script, je peux ensuite ma fonction depuis la console :
BASH $> ./fonction.sh Bonjour tout BASH $>
Notion fondamentale
Le code s'exécute de manière séquentielle, ce qui induit deux choses :
- Toutes les variables de l'environnement courant définies avant l'appel d'une fonction seront utilisables dans celle-ci
- Les fonctions doivent être définies avant leur appel.
Les arguments
Les arguments d'une fonction sont référencés dans son corps de la même manière que les paramètres de position. Dans l'exemple ci-dessous, le script affectera le premier et unique paramètre, à la position 1.
#!/bin/bash function fctBonjourQui { # Évaluation des arguments passés en paramètre echo "Bonjour" $1 "dans" $0 } # Avant l'appel echo -e "Avant l'appel \$1 vaut" $1 # Appel de la fonction avec un argument en paramètre fctBonjourQui "tout le monde" # Après l'appel echo -e "Après l'appel \$1 vaut" $1
Ce qui donne dans la console :
BASH $> ./fonctionParam.sh paramPerso Avant l'appel $1 vaut paramPerso Bonjour tout le monde dans ./fonctionParam.sh Après l'appel $1 vaut paramPerso BASH $>
Les paramètres de position initialisés avant l'appel de la fonction sont sauvés à l'appel puis restaurés après l'appel.
(NDA : Ça induit que l'on peut utiliser des paramètres par défaut?
Portée des variables
Par défaut, une variable définie à l'intérieur d'une fonction est globale. Pour définir une variable locale à une fonction, on utilise la commande interne local, qui limite la portée de la variable à la fonction.
#!/bin/bash function fctBonjourQui { local qui qui="tout le monde" } # Appel de la fonction fctBonjourQui # Évaluation de la variable (locale à la fonction) echo $qui
Ici, l'appel de ce script depuis la console ne renvoie rien : en effet, la variable qui étant locale, la dernière instruction demande l'affichage du contenu d'une variable qui n'existe pas.