Programmation Bash/Fonctions

Comme pour tout autre langage, l'utilisation de fonctions facilite le développement de scripts et la structuration de ceux-ci.

Déclaration

modifier

Pour déclarer une fonction, il existe différentes méthodes, nous pouvons toujours utiliser la syntaxe suivante malgré le fait qu'elle soit dépréciée :

function maFonction()
{
  instructions
}

La déclaration d'une fonction doit toujours se situer avant son appel.

Le mot-clé function est optionnel :

maFonction()
{
  instructions
}

Les deux syntaxes ont leur avantage :

  • L'absence du mot-clé permet au script d'être compatible avec les shells Bourne et Korn.
  • La présence du mot-clé permet d'éviter une collision de nom avec les alias.

Appel et paramètres

modifier

Pour appeler une fonction, on utilise la syntaxe suivante:

maFonction param_1 param_2 ... param_n

Paramètres passés à la fonction

modifier

Ces paramètres sont bien sûrs optionnels. À l'intérieur de la fonction, ils sont représentés, respectivement, par les variables $1, $2,... , $n. $0 représente toujours le nom du script (et non de la fonction) qui s'exécute.

Le nombre de paramètres passés à une fonction est représenté par la variable $#

Exemple:

#!/bin/bash

# déclaration d'une fonction
function maFonction() 
{ local varlocal="je suis la fonction"
  echo "$varlocal"
  echo "Nombres de paramètres : $#"
  echo $1
  echo $2
}

# appel de ma fonction
maFonction "Hello" "World!"

Ce qui donne le résultat suivant:

je suis la fonction
Nombres de paramètres : 2
Hello
World!

Une fonction termine son exécution lorsqu'elle n'a plus d'instructions à exécuter ou lorsqu'elle rencontre l'instruction return ou exit. Ces instructions peuvent être suivies d'un entier positif, qui correspond à la valeur de retour de la fonction. Si aucune valeur n'est spécifiée, c'est la valeur 0 qui est renvoyée.

La valeur de retour de la dernière fonction appelée est stockée dans la variable $?

Variables

modifier

Outre les paramètres, une fonction peut utiliser plusieurs variables:

  • Réutiliser toutes les variables globales du script. Par défaut dans un script shell, les variables sont déclarées comme étant globales.
  • En déclarer de nouvelles.
  • Déclarer des variables locales. Pour déclarer une variable localement, il faut la faire précéder du mot clé local. Une telle variable ne sera utilisable que dans la fonction qui la déclare durant l'exécution de celle-ci mais sera considérée comme globale (donc connue) par les fonctions appelées à partir de cette fonction (après la déclaration locale de la variable).

Pour éviter d'accéder en lecture à une variable n'ayant pas d'existence, on peut inscrire la commande set -u en début de script.