Linux Script Shell - 22 - Fonctions / Function
Table des matières:
- Déclaration de fonction Bash
- Portée des variables
- Valeurs de retour
- Passer des arguments aux fonctions Bash
- Conclusion
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:
-
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
functionsuivi 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
3nous 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 ligne4est le corps de la fonction. Le corps de la fonction peut contenir plusieurs commandes et déclarations de variables. La ligne5, le crochet fermant}, définit la fin de la fonctionhello_world. À la ligne7noushello_worldla 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.
#!/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:
#!/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$0est 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.
- En cas de double guillemet,
Voici un exemple:
~ / en passant_arguments.sh
#!/bin/bash greeting () { echo "Hello $1" } greeting "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 bashJuniper: Johnson prendra ses fonctions de PDG en septembre
Juniper Networks a confirmé jeudi que son PDG, Kevin Johnson, deviendrait en septembre.
Microsoft ajoutera des fonctions de confidentialité à IE8
Microsoft prévoit d'ajouter de nouvelles fonctionnalités de confidentialité à IE8, son prochain navigateur.
Tsujino est actuellement directeur de la gestion des produits chez Google Japon et prendra ses fonctions le 1er janvier. selon une brève déclaration publiée par la société. En tant que président, il sera responsable de tous les aspects des activités de Google au Japon.
Depuis qu'il a rejoint Google en 2007, la société a lancé un certain nombre de nouveaux services au Japon, notamment le flux Street View sur Google Maps. Street View permet aux utilisateurs d'avoir une vue d'ensemble de nombreux points le long des rues de la base de données.







