Android

Fonctions bash

Linux Script Shell - 22 - Fonctions / Function

Linux Script Shell - 22 - Fonctions / Function

Table des matières:

Anonim

Une fonction Bash est essentiellement un ensemble de commandes qui peuvent être appelées plusieurs fois. Le but d'une fonction est de vous aider à rendre vos scripts bash plus lisibles et à éviter d'écrire le même code encore et encore.

Par rapport à la plupart des langages de programmation, les fonctions Bash sont quelque peu limitées. Dans ce tutoriel, nous allons couvrir les bases des fonctions Bash et vous montrer comment les utiliser dans vos scripts shell.

Déclaration de fonction Bash

La syntaxe pour déclarer une fonction bash est très simple. Ils peuvent être déclarés sous deux formats différents:

  1. Le premier format commence par le nom de la fonction, suivi des parenthèses. Il s'agit du format préféré et le plus utilisé.

    function_name () { commands }

    Version sur une seule ligne:

    function_name () { commands; }

    Le deuxième format commence par le mot réservé à la function suivi du nom de la fonction.

    function function_name { commands }

    Version sur une seule ligne:

    function function_name { commands; }

Quelques points à noter:

  • La liste de commandes entre accolades {} est le corps de la fonction. Les accolades qui entourent le corps de la fonction doivent être séparées du corps par des espaces ou des retours à la ligne. La définition d'une fonction ne l'exécute pas. Pour appeler une fonction bash, utilisez simplement le nom de la fonction. Les commandes entre les accolades sont exécutées chaque fois que la fonction est appelée dans le script shell. La définition de la fonction doit être placée avant tout appel à la fonction. Lorsque vous utilisez des fonctions «compactées» sur une seule ligne, un point-virgule ; doit suivre la dernière commande de la fonction. Vous devez toujours essayer de garder vos noms de fonction descriptifs.

Pour mieux comprendre cela, jetez un œil à l'exemple suivant:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Analysons le code ligne par ligne:

  • À la ligne 3 nous définissons la fonction en lui donnant un nom et en ouvrant l'accolade { qui marque le début du corps de la fonction. La ligne 4 est le corps de la fonction. Le corps de la fonction peut contenir plusieurs commandes et déclarations de variables. La ligne 5 , le crochet fermant } , définit la fin de la fonction hello_world . À la ligne 7 nous hello_world la fonction. Vous pouvez exécuter la fonction autant de fois que nécessaire.

Si vous exécutez le script, il s'imprimera hello, world .

Portée des variables

Les variables globales sont des variables accessibles de n'importe où dans le script, quelle que soit la portée. Dans Bash, toutes les variables par défaut sont définies comme globales, même si elles sont déclarées à l'intérieur de la fonction.

Les variables locales peuvent être déclarées dans le corps de la fonction avec le mot-clé local et ne peuvent être utilisées qu'à l'intérieur de cette fonction. Vous pouvez avoir des variables locales avec le même nom dans différentes fonctions.

Pour mieux illustrer le fonctionnement de l'étendue des variables dans Bash, considérons un exemple:

~ / variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Le script commence par définir deux variables globales var1 et var2 . Ensuite, une fonction qui définit une variable locale var1 et modifie la variable globale var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

De la sortie ci-dessus, nous pouvons conclure que:

  • Si vous définissez une variable locale dans le corps de la fonction avec le même nom qu'une variable globale existante, elle aura priorité sur la variable globale. Les variables globales peuvent être modifiées à partir de la fonction.

Valeurs de retour

Contrairement aux fonctions des «vrais» langages de programmation, les fonctions Bash ne vous permettent pas de renvoyer une valeur lors de l'appel. Lorsqu'une fonction bash se termine, sa valeur de retour est l'état de la dernière instruction exécutée dans la fonction, 0 pour le succès et un nombre décimal non nul dans la plage 1 - 255 pour l'échec.

Le statut de retour peut être spécifié à l'aide du mot clé return , et il est affecté à la variable $? . L'instruction return termine la fonction. Vous pouvez le considérer comme l'état de sortie de la fonction.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Pour renvoyer réellement une valeur arbitraire à partir d'une fonction, nous devons utiliser d'autres méthodes. L'option la plus simple consiste à affecter le résultat de la fonction à une variable globale:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Une autre meilleure option pour renvoyer une valeur à partir d'une fonction est d'envoyer la valeur à stdout utilisant echo ou printf comme indiqué ci-dessous:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

Au lieu d'exécuter simplement la fonction qui affichera le message sur stdout, nous func_result la sortie de la fonction à la variable func_result utilisant la substitution de commande $() . La variable peut ensuite être utilisée selon les besoins.

Passer des arguments aux fonctions Bash

Pour passer un nombre quelconque d'arguments à la fonction bash, placez-les simplement juste après le nom de la fonction, séparés par un espace. C'est une bonne pratique de double-citer les arguments pour éviter une mauvaise analyse d'un argument avec des espaces dedans.

  • Les paramètres passés sont $1 , $2 , $3 $n , correspondant à la position du paramètre après le nom de la fonction. La variable $0 est réservée au nom de la fonction. La variable $# contient le nombre de paramètres / arguments positionnels passés à la Les variables $* et $@ contiennent tous les paramètres / arguments positionnels passés à la fonction.
    • En cas de double guillemet, "$*" développe en une seule chaîne séparée par un espace (le premier caractère d'IFS) - "$1 $2 $n" . En guillemet double, "$@" développe en chaînes séparées - "$1" "$2" "$n" .Lorsqu'ils ne sont pas entre guillemets, $* et $@ sont identiques.

Voici un exemple:

~ / en passant_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Conclusion

Une fonction Bash est un bloc de code réutilisable conçu pour effectuer une opération particulière. Une fois définie, la fonction peut être appelée plusieurs fois dans un script.

Vous pouvez également lire comment utiliser une fonction Bash pour créer une commande de raccourci mémorable pour une commande plus longue.

terminal bash