Comment utiliser getopts pour analyser les options des scripts shell Linux ?

By Corentin BURTIN

L’analyse des options en ligne de commande dans un script shell Linux est une compétence essentielle pour tout développeur ou administrateur système. Parmi les outils disponibles, getopts s’impose comme une solution robuste et conforme aux standards POSIX. En tant que journaliste technique, j’ai expérimenté de nombreux projets où getopts a fait la différence entre un script fragile et un outil professionnel.

Cet article vous guide pas à pas pour apprendre à utiliser getopts de façon optimale, en illustrant ses subtilités, ses avantages, ses pièges et ses cas d’usage réels.

À retenir

  • getopts permet de gérer proprement les options des scripts shell Linux, selon les normes POSIX.
  • Il facilite la gestion des arguments avec ou sans valeurs, tout en assurant un traitement fluide.
  • Sa maîtrise augmente la fiabilité, la lisibilité et la portabilité de vos scripts.

Syntaxe et fonctionnement de getopts dans un script shell Linux

« Comprendre les fondations de l’outil, c’est déjà maîtriser la moitié de son utilisation. »

H. Lemaitre, formateur DevOps

Définir les options possibles dans un script

Le point de départ pour utiliser getopts est sa syntaxe simple : getopts « ab:c » option

A lire également :  Application pour joindre des vidéos

Ici, les lettres définissent les options valides. Un deux-points après une lettre indique que l’option nécessite un argument. Dans mes scripts de backup automatique, j’ai souvent utilisé des options comme -s (source) ou -d (destination) avec getopts, car cela clarifie les intentions.

Boucle de traitement des options

Le schéma classique repose sur une boucle while et un case :

while getopts « s:d: » opt; do
case $opt in
s) echo « Source : $OPTARG » ;;
d) echo « Destination : $OPTARG » ;;
*) usage ;;
esac
done

Ce modèle garantit que chaque option est gérée proprement. Grâce à la variable spéciale OPTARG, chaque valeur d’option est automatiquement récupérée.

Gestion des erreurs et des options invalides

« Un bon script anticipe les erreurs, un excellent script les gère élégamment. »

Clara Bouchard, développeuse systèmes

Mode silencieux et contrôle fin

Pour éviter les messages d’erreur automatiques, placez un : en tête de la chaîne d’options : getopts « :s:d: » opt

Cela vous permet de personnaliser les messages. Dans un projet d’outil de surveillance réseau que j’ai codé en 2023, j’ai utilisé ce mode pour offrir des erreurs contextualisées aux utilisateurs.

Intégrer une fonction d’usage claire

En cas d’erreur, un message d’aide s’impose :

usage() {
echo « Usage : $0 -s -d « 
exit 1
}

Ce type de fonction améliore grandement l’expérience utilisateur.

Exemples pratiques d’utilisation de getopts

« La pédagogie commence quand l’exemple parle plus fort que la théorie. »

Julien Lefèvre, ingénieur en automatisation

Exemple de script basique

#!/bin/bash
while getopts « :a:b:c » opt; do
case $opt in
a) echo « Option A avec : $OPTARG » ;;
b) echo « Option B avec : $OPTARG » ;;
c) echo « Option C activée » ;;
\?) echo « Option invalide : -$OPTARG » ;;
esac
done

A lire également :  Cet ordinateur portable fonctionne sous Android, pas sous Windows ou Linux

Ce script gère trois options, dont deux attendent des arguments. Dans mes cours d’introduction au scripting, je m’appuie sur ce modèle pour initier les étudiants à la puissance de getopts.

Tableau des principales variables utilisées avec getopts

VariableRôle
OPTARGContient l’argument de l’option en cours (si requis).
OPTINDIndex du prochain argument à analyser dans la liste $@.
optionLettre représentant l’option en cours de traitement.

Gérer les arguments restants après les options

Utilisation de shift pour traiter les fichiers en fin de ligne

Après le getopts, on utilise souvent : shift $((OPTIND-1))

Cela repositionne les paramètres pour qu’ils correspondent aux arguments restants. Cette technique m’a été utile lors de la création de scripts de traitement de fichiers batch où les options précédaient une liste de fichiers.

Exemple complet avec validation

#!/bin/bash
usage() {
echo « Usage: $0 -v <15|75> -p <path> » >&2
exit 1
}

while getopts « :v:p: » opt; do
case « ${opt} » in
v) [[ « $OPTARG » =~ ^(15|75)$ ]] || usage ;;
p) path=$OPTARG ;;
*) usage ;;
esac
done
shift $((OPTIND – 1))

[[ -z « $path » ]] && usage
echo « Version : $OPTARG »
echo « Chemin : $path »

Ce script offre un excellent équilibre entre robustesse, contrôle des erreurs et lisibilité.

Limites et alternatives à getopts dans les scripts shell Linux

« L’élégance d’un outil ne le rend pas universel, mais il reste irremplaçable dans son domaine. »

Nabil Rahmani, architecte système

Limite aux options courtes

getopts ne prend en charge que les options de type -x, pas –option. Cela peut gêner dans les cas complexes.

A lire également :  Définir les permissions par défaut pour les nouveaux fichiers et sous-répertoires

Vers des outils modernes comme getoptions

Des projets comme getoptions permettent de gérer les options longues et génèrent automatiquement l’aide en ligne. Néanmoins, selon mon expérience, getopts reste le meilleur choix pour la portabilité entre shells.

Et vous, quels scripts utilisez-vous avec getopts ? Partagez vos astuces, vos pièges à éviter ou vos retours d’expérience dans les commentaires !