Guillaume Seren

J'aime bien le bash, c'est un langage, très simple mais si l'utilise bien on peut faire beaucoup de choses avec.

Un problème récurrent quand on écrit beaucoup de scripts bash, c'est la gestion des arguments et options.

En effet, la manière la plus simple de résoudre ce problème est d'utiliser, les opérateur de position ($n) par exemple:

# Acceder au paramètre n
$ echo $1
$ echo $4

Ensuite on a des "paramètres spéciaux": 

# Nom du script.
$0
# Retourne l'ensemble des paramètres dans une chaine.
$*
# Retourne l'ensemble des paramètre dans un tableau.
$@
# Retourne le nombre de paramètres sous forme d'un entier décimal.
$#
# Retourne le PID du shell courant.
$$
# Retourne le PID du dernier job placé en arrière plan.
$!
# Retourne le code de sortie de la dernière tache executée.
$?
# Retourne les options bash de la commande set.
$-
# Retourne le dernier argument de la dernière commande
$_

Ainsi avec ces commande «spéciales» ont peut compter, tester et utiliser les argument passés au script, cela permet de fonctionner pour les scripts simple mais cela n'est pas pratique, pourquoi:

  • Les paramètres ne sont pas nommés, et donc on ne peut les reconnaitre que par leur nombres ou leur nature ce qui alourdi le code.
  • Il n'y a pas de support d'argument obligatoire, la aussi le processus est a coder dans le script.
  • Il manque aussi la notion d'option (flag), a différencier de l'argument qui lui apporte de la donnée.
  • Enfin sans ajouter un processus de test par regex dans son script, il n'est pas possible de tester la nature des arguments.

En cherchant à contourner ces inconvénients j'ai découvert getopts que je vais développer dans un prochain billet.