Passage propre d’arguments en script shell

Tout admin est ou a été confronté à réaliser des dizaines de script d’automatisation de tâche ou même de scripts lui facilitant des tâches quotidiennes. Dans ce billet je vais expliquer comment on va pouvoir passer des arguments de manière propre à un script shell de cette manière :

./script -h 192.168.10.24 -u admin -p password

oubliez les scripts sales comme celui-ci :

./script 192.168.10.24 admin password

Vous avez même la possibilité de créer un usage :

./script
Argument error, usage :
script: -h hostname -u username -p password [-c command]

Voici comment écrire un script rapidement :

#!/usr/bin/env bash
#Script exemple
#
aoption=
boption=
bval=
#Initialisation des paramètres et valeurs
 
while getopts 'ab:' OPTION
#a signifique c'est simplement une option
#b: signifique que cette option possède un paramètre
do
   case $OPTION in
   a)    aoption=1
          ;;
   b)    boption=1
         bval="$OPTARG"
#OPTARG est récupéré de la valeur passé après -b
          ;;
   ?)    printf "Usage : %s [-a ] [- b valeur] args\n" >&2
#Affichage du usage lorsque qu'aucun paramètre n'est passé
          exit 2
          ;;
   esac
done
shift $((OPTIND - 1))
if [ "$aoption" ]
then
   printf "Option -a spécifiée\n"
fi
if [ "$boption" ]
then
   printf 'Option -b spécifiée, valeur : "%s"' "$bval"
fi

Source : linux.com – Inspiré du Bash CookBook