Articles

Fonctions Bash

Posted by admin

Une fonction Bash est essentiellement un ensemble de commandes pouvant ê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 à plusieurs reprises. 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éfinition des fonctions Bash #

la syntaxe pour déclarer une fonction bash est simple., Les fonctions peuvent être déclarées dans deux formats différents:

  1. le premier format commence par le nom de la fonction, Suivi de parenthèses. C’est le format préféré et le plus utilisé.

    function_name () { commands}

    Seule version ligne:

    function_name () { commands; }
  2. Le second format commence par le mot réservé function, suivi par le nom de la fonction.,

    function function_name { commands}

    Seule version ligne:

    function function_name { commands; }

Quelques points à noter:

  • Les commandes entre les accolades ({}) sont appelés les corps de la fonction. Les accolades doivent être séparées du corps par des espaces ou des sauts de ligne.
  • définir 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é avant tout appel à la fonction.
  • lors de l’utilisation de fonctions « compactées” à une seule ligne, un point-virgule; doit suivre la dernière commande de la fonction.
  • essayez toujours de garder vos noms de fonction descriptifs.

Pour mieux comprendre ce processus, jetez un oeil à l’exemple suivant:

~/hello_world.sh
#!/bin/bashhello_world () { echo 'hello, world'}hello_world

nous allons analyser le code ligne par ligne:

  • Dans la ligne 3, nous définissons la fonction en lui donnant un nom., L’Accolade { 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, instructions et déclarations de variables.
  • la Ligne 5, l’accolade fermante }, définit la fin de la balise hello_world fonction.
  • dans la ligne 7 nous exécutons la fonction. Vous pouvez exécuter la fonction autant de fois que vous en avez besoin.,

Si vous exécutez le script, il afficherahello, world.

Variables Scope #

Les variables globales sont des variables accessibles depuis 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 dans 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 la portée des variables dans Bash, considérons cet exemple:

~ / variables_scope.sh

le script commence par définir deux variables globalesvar1Etvar2. Il y a ensuite une fonction qui définit une variable locale var1 et modifie la variable globale var2.,

Si vous exécutez le script, vous devriez voir la sortie suivante:

Before executing function: var1: A, var2: BInside function: var1: C, var2: DAfter executing function: var1: A, var2: D

à partir de la sortie ci-dessus, nous pouvons conclure que:

  • Lorsqu’une variable locale est définie dans le corps de la fonction avec le même nom qu’une variable globale existante, elle aura la priorité
  • Les variables globales peuvent être modifiées à partir de la fonction.

Return Values #

Contrairement aux fonctions dans les langages de programmation « réels”, les fonctions Bash ne vous permettent pas de renvoyer une valeur lorsqu’elles sont appelées., 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é en utilisant le mot-clé return, Et il est affecté à la variable $?. L’instructionreturn termine la fonction. Vous pouvez le considérer comme l’état de sortie de la fonction .

~ / return_values.,sh
#!/bin/bashmy_function () { echo "some result" return 55}my_functionecho $?
some result55

Pour renvoyer en fait une valeur arbitraire à partir d’une fonction, il faut utiliser d’autres méthodes. L’option la plus simple est d’affecter le résultat de la fonction à une variable globale:

~/return_values.sh
#!/bin/bashmy_function () { func_result="some result"}my_functionecho $func_result
some result

l’Autre, meilleure option pour renvoyer une valeur à partir d’une fonction est d’envoyer la valeur de stdout à l’aide de l’écho ou de la printf comme indiqué ci-dessous:

~/return_values.,sh
#!/bin/bashmy_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 imprimera le message sur stdout, nous affectons la sortie de la fonction à la variablefunc_resulten utilisant la variable$() substitution de commande. La variable peut ensuite être utilisée au besoin.

passer des Arguments aux fonctions Bash #

pour passer n’importe quel nombre 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 citer deux fois les arguments pour éviter la mauvaise interprétation d’un argument avec des espaces.

Voici un exemple:

~/passing_arguments.sh
#!/bin/bashgreeting () { echo "Hello $1"}greeting "Joe"
Hello Joe

Conclusion

Un Bash fonction 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.

Leave A Comment