Comment utiliser les fonctions en Bash

Suraj Joshi 30 janvier 2023
  1. Définir les fonctions en Bash
  2. Portée des variables en Bash
  3. Valeurs de retour d’une fonction en mode Bash
  4. Passage d’arguments à une fonction Bash
Comment utiliser les fonctions en Bash

Une fonction est l’un des aspects les plus importants de tout langage de programmation, et elle rend notre code réutilisable et lisible. Le même code utilisé de manière répétée est écrit à l’intérieur d’une fonction. Et lorsque nous avons besoin du bloc de code, nous appelons simplement la fonction définie.

Définir les fonctions en Bash

Pour définir les fonctions dans Bash, nous pouvons utiliser l’une des deux approches suivantes:

Dans cette approche, nous écrivons le nom de la fonction suivi de parenthèses. Ensuite, nous définissons les fonctions à l’intérieur des accolades. Les fonctions utilisant ce format peuvent être définies en utilisant n’importe lequel des formats:

function_name(){
statements
}
function_name() { statements }

Dans cette approche, nous spécifions le mot-clé function avant le nom de la fonction.

function_name(){
statements
}
function_name() { statements }

Les énoncés à l’intérieur des accolades déterminent ce que fait la fonction. Le nom de la fonction n’a rien à voir avec ce que fait la fonction, mais nous devons rendre les noms des fonctions descriptifs. Définir la fonction ne fera rien. Pour exécuter les commandes dans la définition de la fonction, nous devons appeler la fonction.

Pour appeler la fonction en Bash, nous utilisons le nom de la fonction.

#! /bin/bash

greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Production:

Hello, Folks. Welcome to DelftStack!

Ici, nous définissons la fonction au début avec le nom greet et ensuite nous appelons la fonction. Lorsque nous appelons la fonction, les instructions à l’intérieur d’une définition de fonction sont exécutées, et nous voyons donc Hello, Folks. Welcome to DelftStack! imprimé dans le terminal.

Nous pouvons également définir la fonction en utilisant une autre approche comme:

#! /bin/bash

function greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Production:

Hello, Folks. Welcome to DelftStack!

Nous devons nous assurer que nous définissons toujours la fonction avant de l’appeler.

Portée des variables en Bash

La portée des variables peut être globale ou locale en Bash comme dans d’autres langages de programmation. Cependant, la portée par défaut des variables est toujours globale, même si elle est déclarée dans la portée de la fonction. Nous devons utiliser le mot-clé local pour rendre une variable locale.

#! /bin/bash

gvar1=1
gvar2=2

change_variables() {

    local gvar1=10
    gvar2=7
    
    echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}

echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"

change_variables

echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"

Production:

Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7

Ici, gvar1 et gvar2 déclarés en haut sont des variables globales.

Dans la fonction, gvar1 est déclaré comme une variable locale puisque nous utilisons le mot-clé local avec gvar1 alors que gvar2 fait toujours référence à une variable globale puisqu’elle n’a pas de mot-clé local. Ainsi, la valeur de gvar2 est modifiée globalement par la fonction alors que la valeur de gvar1 est modifiée uniquement à l’intérieur de la fonction.

Valeurs de retour d’une fonction en mode Bash

Contrairement à d’autres langages de programmation, Bash ne permet pas de retourner les valeurs de la fonction. La valeur retournée par la fonction Bash est le statut de la dernière instruction exécutée dans la fonction. Le nombre 0 représente le succès, tandis que le nombre de 1-255 représente l’échec. Nous pouvons spécifier le statut de sortie de la fonction en utilisant le mot-clé return. L’instruction return termine également la fonction.

#! /bin/bash

return_value(){
  echo "This function returns 20!"
  return 30
  echo "After return statement"
}

return_value
echo $?

Production:

This function returns 20!
30

Ici, nous pouvons voir que la fonction return_value retourne la valeur 30 en utilisant l’instruction return, et la valeur est assignée à la variable $?.

Nous pouvons également noter que la fonction se termine après que l’instruction return soit exécutée, car les commandes situées en dessous de l’instruction return ne sont pas exécutées.

Si nous voulons retourner une valeur à partir d’une fonction, nous pouvons assigner la valeur à une variable globale et accéder à la variable depuis l’extérieur de la fonction pour récupérer la valeur.

#! /bin/bash

send_message(){
  message_from_function="Hello From the function!"
}
send_message
echo $message_from_function

Production:

Hello From the function!

Dans le programme, nous assignons la valeur à retourner à la variable globale message_from_function et accédons ensuite à la valeur retournée de la variable.

Passage d’arguments à une fonction Bash

Pour passer des arguments à une fonction Bash, nous mettons simplement les arguments après la fonction. Si nous voulons passer plus d’un argument à une fonction, nous séparons les arguments par un espace. Pour éviter les erreurs d’interprétation des arguments, nous pouvons les mettre entre guillemets.

On accède aux paramètres avec $1 $2 et ainsi de suite en fonction de leur position. $0 représente le nom de la fonction tandis que $# contient le nombre d’arguments de position dans la fonction.

#! /bin/bash

send_message(){
  message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"

Production:

Hello Delft!

Ici, l’argument Delft! est passé dans la fonction et on y accède par le paramètre $1, et on obtient Hello Delft! comme sortie finale de la fonction.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn