Les fonctions en BASH

I. Présentation

Dans ce tutoriel, nous allons voir comment créer des fonctions dans le langages de script bash. La création de fonction est très pratique quand il s'agit d'économiser des bouts de code en les centralisant dans une fonction que nous pourrons appeler à tout moment dans le script. Quelques règles sont à savoir si l'on souhaite utiliser les fonctions en 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.
  • Les variables qu'une fonction utilise sont globales par défaut, cela signifie qu'elles sont les mêmes hors et à l'intérieur d'une fonction
  • Les fonctions, au même titre qu'un script entier, utilisent les variables spéciales.

II. Création d'une fonction

Pour faire nos essais, nous allons créer un script bash :

echo "#!/bin/bash" > script.sh
chmod +x script.sh

Nous créons ensuite notre première fonction "bonjour" qui se chargera d'afficher "bonjour" à l'écran :

BashFonction01

Nous aurons donc cette sortie lors de l'exécution de notre script (commande "./script.sh") :

BashFonction02

La fonction est donc tout ce qui est inscrit entre les deux accolades ( " { } " ). Nous pouvons définir autant de fonction qu'on le souhaite pourvu qu'elles aient toutes un nom différent.

III. Passage de paramètres

Pour rappel, les scripts bash ont un certain nombre de variables spéciales qui permettent de gérer les paramètres passés lors de leur appel. Nous pouvons donc appeler notre fonction avec des paramètres pour que celle-ci les traites avec les variables spéciales (récupérer le nombre de paramètres, récupérer la valeur du premier ou du second paramètre, etc...). Nous allons par exemple vouloir que notre fonction affiche les mots que nous lui passons en paramètre dans le script suivant :

BashFonction03

Un paramètre est donc une valeur que l'on envoie à la fonction lors de son appel en lui disant : "tu vas traiter cette information". Il faut bien sûr que dans la fonction, on mette les variables spéciales adéquat au traitement (Ex : $1 pour récupérer la valeur du premier paramètre passé). On voit donc que l'on passe deux informations à notre fonction "écrire" qui sont "Bonjour" et "Salut !". La fonction va recevoir respectivement ces paramètres dans "$1" et "$2", nous pourrons alors les afficher comme suivant :

BashFonction04

IV. Les variables locales

Comme dit précédemment, les variables par défaut sont globales dans les fonctions, cela se vérifie de la façon suivante :

BashFonction05

Nous aurons alors la sortie suivante :

BashFonction06

Si on définie et initialise la variable hors de la fonction (en dehors des accolades), la valeur sera la même si on l'appelle (afficher son contenu par exemple avec "echo") dans la fonction qu'à l'extérieur de celle-ci. De la même façon, si on modifie cette variable dans la fonction, la modification est valable pour tout le reste du script après l'appel de la fonction. Pour définir une variable comme locale (valable uniquement pour l'intérieur de la fonction), on utilisera le terme "local" avant la définition de la fonction comme suivant :

BashFonction07

Nous aurons donc la sortie suivante :

BashFonction08

On voit donc bien que la valeur de "$var1" n'a été modifié que dans la fonction. Désormais, vous connaissez les bases sur les fonctions en bash. L'utilisation qu'on en fait est généralement très variée mais le principe de construction d'une fonction reste toujours le même.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d’IT-Connect.fr et d’Information-security.fr.
Auditeur sécurité chez Amossys.

    mickael a publié 478 articles sur IT-Connect.See all posts by mickael

    Une réaction sur “Les fonctions en BASH

    • 02/03/2017 à 12:59
      Permalink

      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!

      Répondre

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *