Outils pour utilisateurs

Outils du site


cours:informatique:fun_mooc:maitrise_du_bash_univ-reunion:450_structures_routines

Bash: routines et fonctions

En mode script les fonctions permettent de factoriser le code. La factorisation regroupe des traitements dans une zone unique qu’on utilise à plusieurs reprises dans le code. L'utilisation des fonctions est une bonne pratique qui:

  • augmente la lisibilité;
  • facilite la maintenance.

En mode interactif, la fonction est une manière de créer ses propres commandes en combinant les commandes existantes.

Définition d'une fonction

# définition en début de ligne,
# mnémonique  de la fonction suivit des parenthèses 
# ouvrantes et fermantes et du bloc de commandes entre accolades
 
nom_fonction() {
  cmd1
  cmd2
  ...
  cmdn
}
 
# Pour invoquer une fonction, il suffit de l'appeler par
# son mnémonique en aval de la définition
 
nom_fonction
 
...
 
# deuxième appel
 
nom_fonction

La syntaxe d'appel d'une commande est identique à celle d'une commande classique. Cela se vérifie aussi pour le cas où on doit passer des arguments à la fonction. Sur la commande d’appel, ces arguments doivent être placés les uns après les autres juste après le nom de la fonction:

nom_fonction a1 a2 a3 ... an

Les arguments de la fonction sont placés dans des variables positionnelles. Il s’agit en effet des mêmes variables que l’on a déjà utilisées pour exploiter les arguments des scripts. Le corps de la fonction définit et utilise des paramètres notés sous la forme de variables positionnelles.

Variables locales

Quand on manipule une variable dans un script, les changements subis par cette variable valent pour l’ensemble du script. Et c’est aussi le cas pour les variables utilisées dans le code d’une fonction. Aussi, on dit que les variables sont globales au script, ou encore que la portée d’une variable est globale.

Il est cependant possible de limiter la portée d’une variable dont l’usage ne concerne que l’espace du corps d’une fonction. Cela permet d’éviter d’entrer en conflit avec les autres traitements du script, pour cela on utilise le mot clé local lors de la déclaration de la variable:

local nom_variable=valeur

Retour de la fonction

Le mot clé return permet de retourner une valeur comprise entre 0-255. Pour toute autre valeur, il faut trouver une méthode de contournement de cette limitation. En général:

  • Stocker le résultat dans une variable globale
  • Écrire une chaîne de caractères sur la sortie standard et utiliser la substitution de chaîne pour la récupérer et l'affecter à une variable.

Routines en mode interactif

Alias

Un alias permet de raccourcir la saisie d'une commande usuelle avec ses arguments. Utilisée sans arguments, la commande interne alias liste les alias existants:

# définir un nouvel alias
alias nomAlias="commande à exécuter"
 
# La commande interne unalias supprime un alias existant
unalias nomAlias

permettent de gagner en efficacité et permettent d’adapter réellement l’utilisation de la ligne de commande à l’utilisateur. Cependant il faut comprendre que les alias sont une substitution. Le nom de l’alias est remplacé par la commande ou plus généralement par la chaîne de caractères associée au nom d’alias. L’alias est une opération syntaxique effectuée par le Bash. L’alias n’existe pas en phase d’exécution de la commande. Par conséquent, il n’est pas possible de passer des arguments à utiliser dans la chaîne de caractères associée à l’alias. Il n’y a pas d’appel d’alias comme pour une fonction. C’est là la principale limitation dans l’usage de l’alias.

Fonctions

Les alias ne permettent pas le traitement d'arguments à l'exécution. Dans ce cas, il faut utiliser les fonctions. Il est possible de définir des fonctions dans les fichiers .bashrc ou .profile qui permettent d’avoir des traitements plus complexes. Les fonctions définies ainsi sont des commandes situées entre la simplicité d’un alias et la complexité d’un script.

On pourrait se demander la différence entre un script et une fonction. Il en existe plusieurs mais nous n’allons pas entrer dans les détails de ces différences ici. Nous pouvons simplement dire qu’une fonction, comme définie ici (dans les fichiers de préférences de l'utilisateur .bashrc ou .profile), ne peut pas s’utiliser dans un script alors qu’un script pourrait très bien être utilisé dans un autre script.

Une bonne pratique pourrait simplement consister à commencer par créer un alias, si le traitement est trop complexe pour un alias, faire une fonction et si une fonction dépasse une quinzaine de lignes, faire un script.

Une autre bonne pratique est de séparer les fichiers contenant les alias et les fonctions en créant des fichiers .alias et .func et de rajouter dans le fichier .bashrc les lignes suivantes :

# charge les fichiers en fin de .bashrc
source .alias
source .func
cours/informatique/fun_mooc/maitrise_du_bash_univ-reunion/450_structures_routines.txt · Dernière modification : 2021/04/22 21:20 de 93.28.24.141