Bash : Fonctions

De Justine's wiki
Aller à la navigation Aller à la recherche

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.