Unix / Linux - Fonctions Shell

Dans ce chapitre, nous discuterons en détail des fonctions du shell. Les fonctions vous permettent de décomposer la fonctionnalité globale d'un script en sous-sections logiques plus petites, qui peuvent ensuite être appelées à effectuer leurs tâches individuelles en cas de besoin.

Utiliser des fonctions pour effectuer des tâches répétitives est un excellent moyen de créer code reuse. C'est une partie importante des principes modernes de programmation orientée objet.

Les fonctions du shell sont similaires aux sous-programmes, procédures et fonctions dans d'autres langages de programmation.

Créer des fonctions

Pour déclarer une fonction, utilisez simplement la syntaxe suivante -

function_name () { 
   list of commands
}

Le nom de votre fonction est function_name, et c'est ce que vous utiliserez pour l'appeler ailleurs dans vos scripts. Le nom de la fonction doit être suivi de parenthèses, suivi d'une liste de commandes entre accolades.

Exemple

L'exemple suivant montre l'utilisation de la fonction -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Lors de l'exécution, vous recevrez la sortie suivante -

$./test.sh
Hello World

Passer des paramètres à une fonction

Vous pouvez définir une fonction qui acceptera des paramètres lors de l'appel de la fonction. Ces paramètres seraient représentés par$1, $2 etc.

Voici un exemple où nous passons deux paramètres Zara et Ali , puis nous capturons et imprimons ces paramètres dans la fonction.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Lors de l'exécution, vous recevrez le résultat suivant -

$./test.sh
Hello World Zara Ali

Renvoyer des valeurs à partir de fonctions

Si vous exécutez un exit depuis l'intérieur d'une fonction, son effet n'est pas seulement de terminer l'exécution de la fonction mais aussi du programme shell qui a appelé la fonction.

Si vous souhaitez simplement terminer l'exécution de la fonction, il existe un moyen de sortir d'une fonction définie.

En fonction de la situation, vous pouvez renvoyer n'importe quelle valeur de votre fonction en utilisant le return commande dont la syntaxe est la suivante -

return code

Ici code peut être tout ce que vous choisissez ici, mais vous devez évidemment choisir quelque chose qui est significatif ou utile dans le contexte de votre script dans son ensemble.

Exemple

La fonction suivante renvoie une valeur 10 -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

Lors de l'exécution, vous recevrez le résultat suivant -

$./test.sh
Hello World Zara Ali
Return value is 10

Fonctions imbriquées

L'une des caractéristiques les plus intéressantes des fonctions est qu'elles peuvent s'appeler elles-mêmes ainsi que d'autres fonctions. Une fonction qui s'appelle elle-même est appeléerecursive function.

L'exemple suivant montre l'imbrication de deux fonctions -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Lors de l'exécution, vous recevrez le résultat suivant -

This is the first function speaking...
This is now the second function speaking...

Appel de fonction depuis l'invite

Vous pouvez mettre des définitions pour les fonctions couramment utilisées dans votre .profile. Ces définitions seront disponibles chaque fois que vous vous connecterez et vous pourrez les utiliser à l'invite de commande.

Vous pouvez également regrouper les définitions dans un fichier, par exemple test.sh, puis exécutez le fichier dans le shell actuel en tapant -

$. test.sh

Cela a pour effet de provoquer des fonctions définies à l'intérieur test.sh à lire et à définir dans le shell courant comme suit -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Pour supprimer la définition d'une fonction du shell, utilisez la commande unset avec le .foption. Cette commande est également utilisée pour supprimer la définition d'une variable dans le shell.

$ unset -f function_name