Les fonctions en script bash

Bash est presque un langage de dèveloppement. Il est possible de factoriser le code avec des fonctions.

Un exemple simple :

#!/bin/bash

ma_fonction()
{
 return 0
}

if ma_fonction
then
  echo "Ok"
fi

Cela ne fait rien mais c'est une fonction.

En bash une fonction ne retourne que des status de retour (exit status) et pas comme dans les autres langagues des nombres ou des chaines de caractères entre autre.

On peut passer des arguments à notre fonction même si le passage est un peu spécial :

#!/bin/bash

function hello {

echo "Hello " $1

return 0;
}

hello "World"

et cela vous affiche bien "hello". Sachez que vous pouvez appeler la fonction sans argument ou avec deux ou plus d'arguments, cela fonctionne niquel sans se plaindre.

Sachez par contre que les variables ne peuvent pas être modifiées dans les fonctions. Testez ce script :

#!/bin/bash

function affiche {
  $var="tutu"
  echo $var
}
 
var="test"

affiche $var

Il vous affiche bien 'test' et non 'tutu'.

Mais l'intérêt des fonctions est de récupérer leurs résultats.  On va utiliser une fonction qui va nous renvoyer une chaine de caractères avec des séparateurs entre les chaines afin de pouvoir les différencier au retour.

Mon script va ressembler à cela :

#!/bin/bash

ma_fonction()
{
tab=()

valeur="JF"
valeur2="Digonnet"

tab+="${valeur}|"
tab+="${valeur2}|"

# Le premier élément de la liste
echo ${tab%?}

return 0;
}

ma_fonction

qui affiche :

JF|Digonnet

La syntaxe "%?" supprime le dernier caractère de la chaine. On aurait pu écrire aussi :

echo ${tab::-1}

Fait le 06/07/2018