Comment lire les arguments de la ligne de commande dans les scripts shell ?



Les scripts shell représentent un atout majeur pour automatiser des processus et manipuler des informations de manière efficiente. Une compétence essentielle dans la programmation shell est la capacité à interpréter et gérer les arguments transmis au script via la ligne de commande. Cela permet d’adapter le comportement du script aux besoins particuliers de chaque utilisateur.

Ce guide exhaustif explore diverses techniques pour décrypter les arguments de la ligne de commande. Nous aborderons les concepts fondamentaux et proposerons des exemples concrets pour illustrer chaque méthode. Que vous soyez novice en scripts shell ou un utilisateur expérimenté, cet article vous donnera les clés pour maîtriser l’interaction entre vos scripts et les données fournies par l’utilisateur.

Introduction aux paramètres de la ligne de commande

Les paramètres de la ligne de commande sont des informations complémentaires transmises à un script lors de son exécution. Ces paramètres peuvent prendre la forme de fichiers, d’options, de valeurs ou de toute autre donnée pertinente. Le script shell peut ensuite utiliser ces informations pour réaliser des actions spécifiques, modifier son déroulement ou produire des sorties personnalisées.

À titre d’illustration, prenons l’exemple d’un script nommé salutation.sh qui affiche un message de bienvenue. Ce script peut être lancé avec un paramètre indiquant le nom de l’utilisateur :

bash
./salutation.sh Marie

Dans cet exemple, Marie est l’argument fourni au script via la ligne de commande. Le script salutation.sh peut alors exploiter ce paramètre pour personnaliser le message :

bash
echo "Bienvenue, Marie !"

Méthodes d’interprétation des arguments de ligne de commande

Plusieurs approches existent pour décoder les arguments de la ligne de commande dans les scripts shell. Examinons les plus courantes :

1. Le tableau $@

La variable spéciale $@ englobe l’ensemble des arguments fournis à la ligne de commande, chacun étant considéré séparément. On peut accéder à chaque argument via un index numérique, en commençant par 1 pour le premier argument (et non 0 comme indiqué dans l’article original).

Exemple:

bash
#!/bin/bash

echo « Le premier argument est : $1 »
echo « Le second argument est : $2 »
echo « L’ensemble des arguments est : $@ »

Si vous lancez ce script avec la commande ./script.sh param1 param2, le résultat sera :


Le premier argument est : param1
Le second argument est : param2
L'ensemble des arguments est : param1 param2

2. La variable $#

La variable $# stocke le nombre total d’arguments transmis au script. Elle est utile pour déterminer si des paramètres ont été fournis et pour exécuter des actions spécifiques en fonction de leur nombre.

Exemple:

bash
#!/bin/bash

if [ $# -eq 0 ]; then
echo « Aucun paramètre n’a été spécifié. »
else
echo « Nombre de paramètres : $# »
fi

Ce script informera l’utilisateur si des arguments ont été passés, et le cas échéant, indiquera leur nombre.

3. La boucle for

La boucle for simplifie le parcours de tous les arguments de la ligne de commande. On peut utiliser la variable $@ ou $* dans la boucle pour accéder à chaque argument.

Exemple:

bash
#!/bin/bash

for param in « $@ »; do
echo « Paramètre : $param »
done

Ce script affichera chaque argument de la ligne de commande sur une ligne distincte.

4. La commande shift

La commande shift décale les arguments de la ligne de commande d’une position vers la gauche. Le premier argument devient le second, le second devient le troisième, etc. shift est souvent employée pour traiter les arguments de la ligne de commande de manière séquentielle.

Exemple:

bash
#!/bin/bash

while [ $# -gt 0 ]; do
echo « Paramètre actuel : $1 »
shift
done

Ce script affiche chaque argument de la ligne de commande, en utilisant shift pour passer au paramètre suivant à chaque itération.

5. La commande getopts

La commande getopts est un outil puissant pour analyser les options de la ligne de commande, généralement précédées d’un tiret (-). getopts peut gérer les options courtes et longues et permet de définir des valeurs par défaut pour les options.

Exemple:

bash
#!/bin/bash

while getopts « :ahp: » opt; do
case $opt in
a)
echo « Mode activé »
;;
h)
echo « Usage : $0 [-a] [-h] [-p nom] »
exit 0
;;
p)
nom= »$OPTARG »
;;
\?)
echo « Option invalide : -$OPTARG »
exit 1
;;
🙂
echo « L’option -$OPTARG requiert un argument. »
exit 1
;;
esac
done

echo « Nom : $nom »

Ce script utilise getopts pour analyser les options -a (activer un mode), -h (aide) et -p (nom). Si l’option -h est spécifiée, un message d’aide est affiché. Si l’option -p est spécifiée avec un nom, ce nom est stocké dans la variable nom.

Conclusion

La capacité de lire et de traiter les arguments de la ligne de commande est une compétence fondamentale pour les scripts shell. En comprenant les diverses méthodes présentées, vous pourrez créer des scripts plus adaptables, puissants et intuitifs.

Il est important de retenir que la méthode choisie dépend de la façon dont vous souhaitez analyser les arguments. Si vous devez gérer des options simples, getopts est un excellent choix. Pour accéder à tous les arguments de manière séquentielle, la boucle for combinée avec shift est une option adéquate. Et pour accéder à des arguments individuels, les variables $@, $# ainsi que l’indexation numérique sont les plus appropriées.

Questions fréquentes (FAQ)

1. Pourquoi utiliser les arguments de la ligne de commande ?

Les arguments de la ligne de commande permettent de rendre les scripts plus adaptables et flexibles. Ils offrent la possibilité de contrôler le comportement du script et ses données d’entrée sans qu’il soit nécessaire de modifier le code source.

2. Quelle est la différence entre $@ et $* ?

La variable $@ conserve les arguments de la ligne de commande sous forme de chaînes individuelles, tandis que $* les regroupe en une seule chaîne. En pratique, $@ est souvent préféré car il permet de gérer les arguments contenant des espaces.

3. Comment vérifier si un argument spécifique a été fourni ?

Vous pouvez utiliser l’indexation numérique et la comparaison de chaînes pour tester la présence d’un argument spécifique. Par exemple, if [ "$1" == "argument1" ]; then ... fi vérifiera si le premier argument est égal à « argument1 ».

4. Que faire pour traiter les arguments de manière récursive ?

Pour traiter les arguments de manière récursive, il faut employer une fonction qui s’appelle elle-même. Assurez-vous d’utiliser la commande shift pour passer à l’argument suivant lors de chaque appel récursif.

5. Comment gérer des arguments contenant des espaces ?

Pour gérer les arguments contenant des espaces, entourez l’argument entier de guillemets doubles (") lorsque vous lancez le script. Par exemple, ./script.sh "argument avec espace".

6. Comment afficher un message d’aide pour mon script ?

Vous pouvez utiliser l’option -h (aide) de la commande getopts pour afficher un message d’aide. Vous pouvez également ajouter un bloc de code conditionnel qui s’exécutera uniquement si l’option -h est spécifiée.

7. Comment utiliser des options longues dans getopts ?

Pour utiliser des options longues dans getopts, vous devez insérer le flag -- avant le nom de l’option. Par exemple, --help ou --name. Cependant, getopts ne gère pas les options longues directement ; il faudrait utiliser une autre méthode comme getopt.

8. Comment limiter le nombre d’arguments que mon script peut accepter ?

Vous pouvez utiliser la variable $# pour contrôler le nombre d’arguments et afficher un message d’erreur si le nombre dépasse la limite autorisée.

9. Comment utiliser des arguments nommés dans mon script ?

Bien que getopts gère principalement des options courtes, des solutions alternatives permettent de traiter des arguments nommés (par exemple en utilisant une boucle et des conditions ou getopt). Par exemple, --name=John pourrait être analysé pour attribuer la valeur « John » à une variable nommée « name ».

10. Où puis-je trouver plus d’informations sur les arguments de la ligne de commande ?

Vous pouvez trouver plus d’informations sur les arguments de la ligne de commande dans la documentation de votre shell spécifique, comme Bash, Zsh ou Korn Shell. Vous pouvez également consulter des ressources en ligne telles que le site Web de GNU et divers tutoriels.

Mots-clés: arguments de la ligne de commande, script shell, Bash, Zsh, programmation shell, getopts, shift, $@, $#, $*.