GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Scripting Part6 - Créer et utiliser des fonctions Bash

Avant de parler des fonctions bash, discutons de cette situation. Lors de l'écriture de scripts bash, vous vous apercevrez que vous utilisez le même code à plusieurs endroits.

Si vous en avez assez d'écrire les mêmes lignes de code encore et encore dans votre script bash, ce serait bien d'écrire le bloc de code une fois et de l'appeler n'importe où dans votre script bash.

Le shell bash vous permet de faire exactement cela avec Functions .

Fonctions bash sont des blocs de code que vous pouvez réutiliser n'importe où dans votre code. Chaque fois que vous souhaitez utiliser ce bloc de code dans votre script, il vous suffit de saisir le nom de la fonction qui lui est attribué.

Nous allons parler de la façon de créer vos fonctions bash et de les utiliser dans des scripts shell.

Créer une fonction

Vous pouvez définir une fonction comme celle-ci :

NomFonction() {}

Les crochets () sont nécessaires pour définir la fonction.

De plus, vous pouvez définir la fonction à l'aide du mot-clé function, mais ce mot-clé est obsolète pour la portabilité POSIX.

function functionName() { # Définition obsolète mais toujours utilisée et fonctionnelle

Dans la seconde définition, les crochets ne sont pas obligatoires.

Utiliser les fonctions

#!/bin/bashmyfunc() { echo "Utilisation des fonctions"}total=1while [ $total -le 3 ]; do myfunc total=$(($total + 1))doneecho "Boucle terminée"myfuncecho "Fin du script"

Ici, nous avons créé une fonction appelée myfunc, et pour l'appeler, nous avons juste tapé son nom.

Vous pouvez appeler la fonction autant de fois que vous le souhaitez.

Remarque :Si vous essayez d'utiliser une fonction qui n'est pas définie, que se passera-t-il ?

#!/bin/bashtotal=1while [ $total -le 3 ] ; do myfunc total=$(($total + 1))doneecho "Loop End"myfunc() { echo "Utilisation de la fonction ..."}echo "Fin du script"

Oh, c'est une erreur car cette fonction n'existe pas.

Autre remarque :le nom de la fonction bash doit être unique. Sinon, la nouvelle fonction annulera l'ancienne sans aucune erreur.

#!/bin/bashmyfunc() { echo "La première définition de fonction"}myfuncfunction myfunc() { echo "La deuxième définition de fonction"}myfuncecho "Fin du script"

Comme vous pouvez le voir, la deuxième définition de fonction prend le contrôle de la première sans aucune erreur, alors soyez prudent lorsque vous définissez des fonctions.

Utiliser la commande de retour

La commande return renvoie un entier à partir de la fonction.

Il existe deux manières d'utiliser la commande return; la première façon est la suivante :

#!/bin/bashmyfunc() { read -p "Entrez une valeur :" value echo "ajouter une valeur" return $(($value + 10))}myfuncecho "La nouvelle valeur est $?"

La fonction myfunc ajoute 10 à la variable $value, puis affiche la somme à l'aide de la variable $ ? variable.

N'exécutez aucune commande avant d'avoir obtenu la valeur de la fonction, car la variable $ ? renvoie le statut de la dernière ligne.

Cette méthode de retour renvoie des entiers. Qu'en est-il du retour des chaînes ?

Utilisation de la sortie de la fonction

La deuxième façon de renvoyer une valeur à partir d'une fonction bash est la substitution de commande. De cette façon, vous pouvez renvoyer n'importe quoi de la fonction.

#!/bin/bashmyfunc() { read -p "Entrez une valeur :" value echo $(($value + 10))}result=$(myfunc)echo "La valeur est $result"

Paramètres de passage

Nous pouvons gérer les fonctions bash comme de petits extraits que nous pouvons réutiliser, et c'est OK, mais nous devons faire de la fonction un moteur, nous lui donnons quelque chose, et elle renvoie un résultat basé sur ce que nous fournissons.

Vous pouvez utiliser les variables d'environnement pour traiter les paramètres transmis à la fonction. Le nom de la fonction est déclaré en tant que variable $0 et les paramètres transmis sont $1, $2, $3, etc.

Vous pouvez obtenir le nombre de paramètres transmis à la fonction à l'aide de ($# ) variable.

Nous passons des paramètres comme ceci :

myfunc $val1 10 20

L'exemple suivant montre comment utiliser la variable ($#) :

#!/bin/bashaddnum() { if [ $# -gt 2 ]; then echo "Paramètres incorrects passés" # Si les paramètres ne sont pas égaux à 2 else echo $(($1 + $2)) # Sinon, ajoutez-les fi}echo -n "Adding 10 and 15:"value=$(addnum 10 15)echo $valueecho -n "Ajout de trois nombres :"value=$(addnum 10 15 20)echo $value

La fonction addnum obtient le nombre de paramètres passés. Si plus de 2 sont passés, il renvoie -1.

S'il y a un paramètre, la fonction addnum ajoute ce paramètre deux fois. Si deux paramètres sont passés, la fonction addnum les additionne, et si vous essayez d'ajouter trois paramètres, elle renverra -1.

Si vous essayez d'utiliser les paramètres passés à l'intérieur de la fonction, cela échoue :

#!/bin/bashmyfunc() { echo $(($1 + $2 + $3 + $4))}if [ $# -eq 4 ]; then value=$(myfunc) echo "Total=$value"else echo "Paramètres passés comme ceci :myfunc a b c d"fi

Au lieu de cela, vous devez les envoyer à la fonction comme ceci :

#!/bin/bashmyfunc() { echo $(($1 + $2 + $3 + $4))}if [ $# -eq 4 ]; then value=$(myfunc $1 $2 $3 $4) echo "Total=$value"else echo "Paramètres passés comme ceci :myfunc a b c d"fi

Maintenant ça marche !!

Traitement des variables dans les fonctions Bash

Chaque variable que nous utilisons a une portée ; la portée est la visibilité variable de votre script.

Vous pouvez définir deux types de variables :

  • Mondial
  • Local

Variables globales

Ils sont visibles et valides n'importe où dans le script bash. Vous pouvez même obtenir sa valeur à l'intérieur de la fonction.

Si vous déclarez une variable globale dans une fonction, vous pouvez obtenir sa valeur en dehors de la fonction.

Toute variable que vous déclarez est une variable globale par défaut. Si vous définissez une variable en dehors de la fonction, vous l'appelez sans problème dans la fonction :

#!/bin/bashmyfunc() { input=$(($input + 10))}read -p "Entrez un nombre :" inputmyfuncecho "La nouvelle valeur est :$input"

Si vous modifiez la valeur de la variable dans la fonction, la valeur sera modifiée en dehors de la fonction.

Alors, comment surmonter quelque chose comme ça? Utilisez des variables locales.

Variables locales

Si vous n'utilisez la variable qu'à l'intérieur de la fonction, vous pouvez la déclarer en tant que variable locale à l'aide du mot-clé local comme ceci :

tmp local=$(( $val + 10 ))

Donc, si vous avez deux variables, l'une à l'intérieur de la fonction et l'autre à l'extérieur de la fonction, et qu'elles portent le même nom, elles ne s'affecteront pas l'une l'autre.

#!/bin/bashmyfunc() { local tmp=$(($val + 10)) echo "La température de l'intérieur est $tmp"}tmp=4myfuncecho "La température de l'extérieur est $tmp" 

Lorsque vous utilisez la variable $tmp dans la fonction myfunc, cela ne change pas la valeur de $tmp, qui est en dehors de la fonction.

Passer des tableaux en paramètres

Que se passe-t-il si vous passez un tableau en paramètre à une fonction :

#!/bin/bashmyfunc() { echo "Les paramètres sont :[email protected]" arr=$1 echo "Le tableau reçu est ${arr[*]}"}my_arr=(5 10 15)echo "L'ancien tableau est :${my_arr[*]}"myfunc ${my_arr[*]}

La fonction ne prend que la première valeur de la variable tableau.

Vous devez désassembler le tableau en ses valeurs uniques, puis utiliser ces valeurs comme paramètres de fonction. Enfin, placez-les dans un tableau dans la fonction comme ceci :

#!/bin/bashmyfunc() { local new_arr new_arr=("[email protected]") echo "La valeur mise à jour est :${new_arr[*]}"}my_arr=(4 5 6)echo "Ancien tableau est ${my_arr[*]}"myfunc ${my_arr[*]}

La variable tableau a été reconstruite grâce à la fonction.

Fonction récursive

Cette fonctionnalité permet à la fonction de s'appeler depuis la fonction elle-même.

L'exemple classique d'une fonction récursive est le calcul de factorielles. Pour calculer la factorielle de 3, utilisez l'équation suivante :

3 ! =1 * 2 * 3

Au lieu de cela, nous pouvons utiliser la fonction récursive comme ceci :

x ! =x * (x-1) !

Donc, pour écrire la fonction factorielle à l'aide de scripts bash, ce sera comme ceci :

#!/bin/bashfac_func() { if [ $1 -eq 1 ]; then echo 1 else local tmp=$(($1 - 1)) local res=$(fac_func $tmp) echo $(($res * $1)) fi}read -p "Entrez la valeur :" valres=$(fac_func $ val)echo "Le factoriel de $val est :$res"

L'utilisation des fonctions bash récursives est si simple !

Créer des bibliothèques

Nous savons maintenant comment écrire des fonctions et comment les appeler, mais que se passe-t-il si vous voulez utiliser ces fonctions bash ou ces blocs de code sur différents fichiers de script bash sans le copier-coller sur vos fichiers.

Vous pouvez créer une bibliothèque pour vos fonctions et pointer vers cette bibliothèque à partir de n'importe quel fichier selon vos besoins.

En utilisant la commande source , vous pouvez intégrer le script de fichier de bibliothèque dans votre script shell.

La commande source a un alias, qui est le point. Pour sourcer un fichier dans un script shell, écrivez la ligne suivante :

. ./monscript

Supposons que nous ayons un fichier appelé myfuncs qui contient les éléments suivants :

addnum() { echo $(($1 + $2 + $3 + $4))}

Maintenant, nous allons l'utiliser dans un autre fichier de script bash comme celui-ci :

#!/bin/bash. ./myfuncsresult=$(addnum 10 10 5 5)echo "Total =$result"

Impressionnant!! Nous avons utilisé les fonctions bash dans notre fichier de script bash ; nous pouvons également les utiliser directement dans notre shell.

Utiliser les fonctions Bash depuis la ligne de commande

Eh bien, c'est facile, si vous lisez le post précédent, qui parlait des signaux et des tâches, vous aurez une idée de la source de notre fichier de fonctions dans le fichier bashrc, et donc nous pouvons utiliser les fonctions directement depuis le shell bash . Sympa

Modifiez le fichier bashrc dans /home/username et ajoutez cette ligne :

. /home/likegeeks/Desktop/mesfonctions

Assurez-vous de saisir le bon chemin.

Maintenant, la fonction est disponible pour que nous l'utilisions directement dans la ligne de commande :

$ addnum 10 20

Remarque :vous devrez peut-être vous déconnecter et vous reconnecter pour utiliser les fonctions bash à partir du shell.

Autre remarque :si vous créez le nom de votre fonction comme l'une des commandes intégrées, vous écraserez la commande par défaut, vous devez donc vous en occuper.

J'espère que vous aimez le poste. Continuez à revenir.

Merci.


Linux
  1. Comment créer un alias et utiliser la commande Alias ​​sous Linux

  2. Fonctions dans les variables shell ?

  3. Problème de script bash - Comparez deux listes et créez-en une troisième ?

  4. Bash Beginner Series #9 :Utiliser des fonctions dans Bash

  5. Exporter une variable de bash et l'utiliser en Python

Fonctions bash

Shell Scripting Partie V :Fonctions dans Bash

Bash Scripting - Fonctions expliquées avec des exemples

Comment utiliser la commande de date dans les scripts bash sous Linux

Créer et utiliser des alias Bash sous Linux

Comment créer et utiliser un fichier d'échange sous Linux