Fonctions Shell

Le shell Linux permet aux utilisateurs de définir des fonctions, qui peuvent ensuite être appelées librement dans des scripts shell.

Le format de définition d'une fonction dans le shell est le suivant :

[ function ] funname [()]

{

    action;

    [return int;]

}

Remarque :

  • 1. Vous pouvez définir avec la syntaxefunction fun(), ou directementfun()sans aucun paramètre.
  • 2. Pour la valeur de retour, vous pouvez explicitement ajouter :returnreturn. Si elle n'est pas ajoutée, le résultat de la dernière commande sera utilisé comme valeur de retour.returnsuivi d'une valeur numériquen(0-255).

L'exemple suivant définit une fonction et l'appelle :

Exemple

#!/bin/bash
# auteur : Example Tutorial
# url:www.example.com

demoFun(){
    echo "Ceci est ma première fonction shell !"
}
echo "-----La fonction commence son exécution-----"
demoFun
echo "-----L'exécution de la fonction est terminée-----"

Résultat de sortie :

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

Ce qui suit définit une fonction avec une instructionreturn:

Exemple

#!/bin/bash
# auteur : Example Tutorial
# url:www.example.com

funWithReturn(){
    echo "Cette fonction additionnera les deux nombres en entrée..."
    echo "Entrez le premier nombre : "
    read aNum
    echo "Entrez le deuxième nombre : "
    read anotherNum
    echo Les deux nombres sont$aNumet$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "La somme des deux nombres saisis est $? !"

La sortie est similaire à ce qui suit :

这个函数会对输入的两个数字进行相加运算...
输入第一个数字: 
1
输入第二个数字: 
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !

La valeur de retour de la fonction, après l'appel de la fonction, s'obtient via$? pour l'obtenir.

Remarque :Toutes les fonctions doivent être définies avant utilisation. Cela signifie que la fonction doit être placée au début du script, et elle ne peut être utilisée que lorsque l'interpréteur shell la rencontre pour la première fois. Pour appeler une fonction, utilisez simplement son nom de fonction.

Remarque : returnL'instruction return ne peut renvoyer qu'un entier compris entre 0 et 255, et la somme des deux nombres saisis peut dépasser cette plage.

Pour résoudre ce problème, vous pouvez modifier l'instruction return et utiliser directement echo pour afficher la somme au lieu d'utiliser return :

Exemple

funWithReturn(){
    echo "Cette fonction additionnera les deux nombres en entrée..."
    echo "Entrez le premier nombre : "
    read aNum
    echo "Entrez le deuxième nombre : "
    read anotherNum
    sum=$(($aNum + $anotherNum))
    echo Les deux nombres sont$aNumet$anotherNum !"
    echo $sum  # Afficher la somme des deux nombres
}

Paramètres de fonction

En Shell, lors de l'appel d'une fonction, vous pouvez lui passer des paramètres. À l'intérieur du corps de la fonction, les valeurs des paramètres sont obtenues sous la forme $n. Par exemple, $1 représente le premier paramètre, $2 représente le deuxième paramètre...

Exemple de fonction avec paramètres :

Exemple

#!/bin/bash
# auteur : Example Tutorial
# url:www.example.com

funWithParam(){
    echo "Le premier paramètre est $1 !"
    echo "Le deuxième paramètre est $2 !"
    echo "Le dixième paramètre est $10 !"
    echo Le dixième paramètre est${10} !"
    echo Le onzième paramètre est${11} !"
    echo "Le nombre total de paramètres est $# !"
    echo "Afficher tous les paramètres sous forme de chaîne $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

Résultat de sortie :

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

Notez que $10 ne peut pas récupérer le dixième paramètre ; pour obtenir le dixième paramètre, vous devez utiliser ${10}. Lorsque n>=10, vous devez utiliser ${n} pour récupérer le paramètre.

De plus, plusieurs caractères spéciaux sont utilisés pour gérer les paramètres :

Gestion des paramètres Description
$# Le nombre de paramètres passés au script ou à la fonction
$* Affiche tous les paramètres passés au script sous forme d'une seule chaîne
$$ Le numéro d'identification du processus actuel du script en cours d'exécution
$! Le numéro d'identification du dernier processus exécuté en arrière-plan
$@ Identique à $*, mais lorsqu'il est utilisé, ajoute des guillemets et renvoie chaque paramètre entre guillemets.
$- Affiche les options actuelles utilisées par Shell, avec la même fonction que la commande set.
$? Affiche l'état de sortie de la dernière commande. 0 signifie aucune erreur ; toute autre valeur indique une erreur.
Autres extensions