Présentation
Une fonction bash est une méthode utilisée dans les scripts shell pour regrouper des blocs de code réutilisables. Cette fonctionnalité est disponible pour la plupart des langages de programmation, connus sous différents noms tels que procédures, méthodes ou sous-programmes.
Cet article fournit un aperçu complet des fonctions bash, de leur fonctionnement et de leur utilisation.
Prérequis
- Un système exécutant Linux.
- Accès au terminal et au shell Bash.
- Un éditeur de texte pour écrire des scripts bash (le guide utilise Vim).
Que sont les fonctions Bash ?
Une fonction bash est une technique permettant de regrouper des bits de code réutilisables sous un même nom pour une utilisation ultérieure. La fonction bash est comme un script dans un script.
L'utilisation de fonctions dans les scripts bash présente deux avantages :
1. Une fonction est lue directement dans la mémoire du shell et stockée pour une utilisation ultérieure. Étant donné que la mémoire de l'ordinateur n'est plus un problème de nos jours, l'utilisation des fonctions est plus rapide que de répéter le code.
2. Les fonctions aident à organiser les longs scripts shell en blocs de code modulaires et réutilisables. Les morceaux sont plus faciles à développer et à maintenir .
Comment utiliser les fonctions Bash ?
Il existe deux manières d'implémenter les fonctions Bash :
- Dans un script shell, où la définition de la fonction doit être avant tout appel à la fonction.
- Avec d'autres commandes d'alias bash et directement dans le terminal en tant que commande.
Pour utiliser les fonctions bash, suivez les instructions ci-dessous.
Syntaxe de la fonction bash
Il existe deux manières différentes de déclarer une fonction bash :
1. Le format le plus utilisé est :
<function name> () {
<commands>
}
Alternativement, la même fonction peut être une ligne :
<function name> () { <commands>; }
2. L'autre façon d'écrire une fonction bash consiste à utiliser le mot réservé function
:
function <function name> {
<commands>
}
Ou en une seule ligne :
function <function name> { <commands>; }
Prenez note des comportements et conseils suivants lors de l'utilisation des fonctions :
- Lorsque vous écrivez sur une seule ligne, les commandes doivent se terminer par un point-virgule (
;
), que ce soit dans des scripts bash ou directement dans le terminal. - Ajout de la
function
le mot réservé rend les parenthèses facultatives. - Les commandes entre les accolades
{ <commands> }
sont appelés le corps de la fonction . Le corps peut contenir n'importe quel nombre de déclarations, de variables, de boucles ou d'instructions conditionnelles. - Essayez d'utiliser des noms descriptifs pour les fonctions. Bien qu'ils ne soient pas nécessaires lors du test des fonctions et des commandes, les noms descriptifs sont utiles dans les paramètres où d'autres développeurs consultent le code.
Comment déclarer et appeler une fonction ?
Une fonction ne s'exécute pas lorsqu'elle est déclarée. Le corps de la fonction s'exécute lorsqu'il est invoqué après la déclaration. Suivez les étapes ci-dessous pour créer un script bash avec différentes options de syntaxe :
1. À l'aide de votre éditeur de texte préféré, créez un script shell appelé syntaxe . Si vous utilisez Vim, exécutez la ligne suivante dans le terminal :
vim syntax.sh
2. Ajoutez le code ci-dessous au script shell :
# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
echo Hello I\'m function 1
echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }
# Declaring functions without the function reserved word
# Multiline
f3 () {
echo Hello I\'m function 3
echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }
# Invoking functions
f4
f3
f2
f1
Le script effectue les opérations suivantes :
- Lignes 4 à 9 montrer comment définir une fonction à l'aide de la
function
mot reservé. La fonctionf1
utilise une syntaxe multiligne dans les lignes 4 à 6, alors quef2
utilise une syntaxe de ligne à la ligne 9. - Lignes 13 à 18 montrer la syntaxe la plus familière.
f3
est une fonction multiligne définie aux lignes 13 à 16, tandis quef4
à la ligne 18 est l'équivalent sur une seule ligne. - Lignes 21 à 24 appeler les fonctions précédemment définies et exécuter les commandes dans les corps de la fonction correspondante. Les appels sont effectués dans l'ordre inverse de la définition.
3. Enregistrez le script et fermez Vim :
:wq
4. Créez le fichier syntax.sh fichier exécutable :
chmod +x syntax.sh
5. Enfin, exécutez le script pour voir le résultat :
./syntax.sh
Comment déclarer et appeler une fonction dans le terminal ?
Pour déclarer et utiliser une fonction dans le terminal :
1. Ouvrez le terminal et saisissez la ligne suivante :
my_function () { echo "Hello I'm a function"; echo "Bye!"; }
2. Exécutez la fonction en saisissant le nom de la fonction dans le terminal :
my_function
La sortie exécute les commandes dans le corps de la fonction.
La fonction ne reste définie que dans la session de terminal en cours. Pour enregistrer pour les sessions futures, ajoutez le code au ~/.bashrc fichier.
Où est définie une fonction Bash ?
Pour voir où une fonction bash est définie et son contenu, entrez les commandes suivantes dans le terminal :
1. Exécutez le shell bash en mode débogueur :
bash --debugger
2. Vérifiez le fichier source de la fonction avec :
declare -F <function name>
Par exemple :
declare -F my_function
La sortie imprime le nom de la fonction, le numéro de ligne et l'emplacement du fichier où se trouve la définition de la fonction.
3. Pour voir le contenu de la fonction, exécutez :
declare -f <function name>
Par exemple :
declare -f my_function
Le declare
le mode de débogage intégré permet de visualiser le contenu et l'emplacement de la fonction sans exécuter le code.
Comment supprimer une fonction Bash ?
Si vous avez besoin de libérer un espace de noms occupé par une fonction dans la session de terminal en cours, exécutez :
unset <function name>
Par exemple :
unset my_function
La fonction n'est plus disponible dans la session de terminal en cours. Cependant, si le code est dans le ~/.bashrc fichier, tout est restauré à la normale lors de la session suivante.
Variables de la fonction bash
Les variables de bash sont globales par défaut et accessibles de n'importe où, y compris les corps de fonction. Les variables définies à l'intérieur d'une fonction sont également globales. Ajout du mot-clé local
rend le terme accessible uniquement dans la fonction et les fonctions/processus enfants.
Dans la portée dynamique , une variable locale ombre une variable globale lorsque les deux portent le même nom.
Essayez le script bash suivant pour montrer comment fonctionnent les variables de fonction dans bash :
1. Créez un script appelé variable.sh :
vim variable.sh
2. Ajoutez le code suivant au script :
var1=1
var2=1
change() {
echo Inside function
echo Variable 1 is: $var1
echo Variable 2 is: $var2
local var1=5
var2=5
echo
echo After change inside function
echo Variable 1 is locally $var1
echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
Le script affiche ce qui suit :
- Lignes 1-2 déclarer les variables
var1
etvar2
et définissez-les tous les deux sur1
. - Lignes 5-6 sont à l'intérieur du corps de la fonction et impriment les variables sur la console. Étant donné que la portée de la variable est globale, les valeurs d'origine sont imprimées.
- Ligne 7 déclare une nouvelle variable locale avec le même nom que la variable globale
var1
. Lalocal var1
masque levar1
global valeur en raison de la portée dynamique. - Ligne 8 change la valeur du
var2
global variables. - Lignes 14 à 22 imprime les valeurs des variables avant et après l'appel de la fonction.
3. Enregistrez le script et quittez Vim :
:wq
4. Modifiez les autorisations du fichier en exécutable :
chmod +x variable.sh
5. Exécutez le script et analysez les résultats :
./variable.sh
Les valeurs des variables s'impriment dans la console via les modifications apportées au script.
Arguments de la fonction bash
Pour passer des arguments à une fonction, ajoutez les paramètres après l'appel de la fonction séparés par des espaces. Le tableau ci-dessous décrit les options disponibles lorsque vous travaillez avec des arguments de fonction bash.
Argument | Rôle |
---|---|
$0 | Réserve le nom de la fonction lorsqu'il est défini dans le terminal. Lorsqu'il est défini dans un script bash, $0 renvoie le nom et l'emplacement du script. |
$1 , $2 , etc. | Correspond à la position de l'argument après le nom de la fonction. |
$# | Contient le nombre d'arguments positionnels passés à la fonction. |
[email protected] et $* | Conservez la liste des arguments de position et fonctionnent de la même manière lorsqu'ils sont utilisés de cette façon. |
"[email protected]" | Développe la liste pour séparer les chaînes. Par exemple "$1", "$2" , etc. |
"$*" | Développe la liste en une seule chaîne, en séparant les paramètres par un espace. Par exemple "$1 $2" etc. |
Suivez les étapes ci-dessous pour tester le fonctionnement des différents arguments dans une fonction.
1. Créez un script appelé arguments :
vim arguments.sh
2. Ajoutez le code suivant dans le script :
arguments () {
echo The function location is $0
echo There are $# arguments
echo "Argument 1 is $1"
echo "Argument 2 is $2"
echo "<[email protected]>" and "<$*>" are the same.
echo List the elements in a for loop to see the difference!
echo "* gives:"
for arg in "$*"; do echo "<$arg>"; done
echo "@ gives:"
for arg in "[email protected]"; do echo "<$arg>"; done
}
arguments hello world
3. Enregistrez le script et quittez Vim :
:wq
4. Rendez le script exécutable :
chmod +x arguments.sh
5. Exécutez le script :
./arguments.sh
La sortie affiche des messages descriptifs pour chaque argument utilisé.
Retour de la fonction bash
Les fonctions bash diffèrent de la plupart des langages de programmation lorsqu'il s'agit de renvoyer une valeur à partir d'une fonction. Par défaut, bash renvoie le statut de sortie de la dernière commande exécutée dans le corps de la fonction.
Le script ci-dessous montre comment spécifier le statut de sortie en utilisant return :
1. Créez un script et nommez-le test.sh :
vim test.sh
2. Ajoutez la fonction suivante au fichier :
test_function() {
echo Test
return 100
}
echo The function\'s output is:
test_function
echo The exit status is:
echo $?
3. Enregistrez et fermez l'éditeur de texte :
:wq
4. Modifiez les autorisations :
chmod +x test.sh
5. Exécutez le script pour voir la sortie de la fonction et l'état de sortie :
./test.sh
Une méthode alternative est de faire écho au résultat de la fonction et d'affecter la sortie à une variable. Modifiez le test.sh script avec le code suivant :
test_function() {
echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use
Cette méthode imite le fonctionnement de la plupart des langages de programmation lors de l'utilisation de fonctions.