Passage d'arguments au script

ShellBeginner
Pratiquer maintenant

Introduction

En programmation Shell, la capacité de passer des arguments à un script est une fonctionnalité fondamentale et puissante. Cela permet aux scripts d'être plus flexibles et réutilisables en acceptant des entrées directement depuis la ligne de commande. Cet atelier vous accompagnera dans la création d'un script Shell capable de recevoir et d'utiliser des arguments. Vous apprendrez à accéder à ces arguments au sein de votre script, à gérer des arguments multiples et à utiliser des variables spéciales pour les traiter efficacement.

Créer un nouveau fichier de script

Commençons par créer un nouveau fichier de script. Nous utiliserons le WebIDE (VS Code) pour cet atelier.

  1. Ouvrez le WebIDE s'il n'est pas déjà ouvert.
  2. Dans l'explorateur de fichiers à gauche, naviguez vers le répertoire /home/labex/project.
  3. Faites un clic droit dans l'explorateur de fichiers et sélectionnez "New File".
  4. Nommez le nouveau fichier arguments.sh.

Maintenant que nous avons créé le fichier, ajoutons la structure de base de notre script :

#!/bin/bash

## Your code will go here

La première ligne est appelée le "shebang" ou "hashbang". Elle indique au système quel interpréteur utiliser pour exécuter le script. Dans ce cas, nous utilisons bash.

Pour les débutants : La ligne shebang est importante car elle vous permet de lancer le script directement (comme ./arguments.sh) au lieu de devoir taper bash arguments.sh à chaque fois. C'est un petit détail, mais cela rend l'utilisation de vos scripts beaucoup plus pratique.

Accéder aux arguments du script

Modifions maintenant notre script pour accéder aux arguments qui lui sont passés et les afficher. En script Shell, des variables spéciales sont utilisées pour accéder aux arguments de la ligne de commande :

  • $0 représente le nom du script lui-même
  • $1, $2, $3, etc., représentent respectivement le premier, le deuxième, le troisième argument, et ainsi de suite

Ajoutez le code suivant à votre fichier arguments.sh :

#!/bin/bash

echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"

Ce script affichera le nom du script ainsi que les trois premiers arguments qui lui sont transmis.

Pour les débutants :

  • Le symbole $ est utilisé pour faire référence aux variables dans bash.
  • $0, $1, $2, etc., sont des variables spéciales que bash définit automatiquement pour vous lorsque vous lancez un script avec des arguments.
  • Si vous lancez le script sans aucun argument, $1, $2 et $3 seront vides, mais le script s'exécutera tout de même sans erreur.

Rendre le script exécutable

Avant de pouvoir lancer notre script, nous devons le rendre exécutable. Cela se fait à l'aide de la commande chmod. Dans le terminal, naviguez vers le répertoire du projet et exécutez la commande suivante :

cd /home/labex/project
chmod +x arguments.sh

La commande chmod +x ajoute les permissions d'exécution au fichier, lui permettant d'être lancé comme un programme.

Pour les débutants :

  • chmod signifie "change mode". Elle est utilisée pour modifier les permissions d'un fichier ou d'un répertoire.
  • L'option +x ajoute la permission d'exécution. C'est indispensable pour que bash puisse lancer le fichier en tant que script.
  • Si vous oubliez cette étape, vous obtiendrez une erreur de type "permission denied" (permission refusée) en essayant de lancer votre script.

Exécuter le script avec des arguments

Maintenant que notre script est exécutable, lançons-le avec quelques arguments. Dans le terminal, exécutez la commande suivante :

./arguments.sh hello world example

Vous devriez voir un résultat similaire à celui-ci :

Script name: ./arguments.sh
First argument: hello
Second argument: world
Third argument: example

Ce résultat montre que notre script a réussi à accéder et à afficher les arguments de la ligne de commande.

Pour les débutants :

  • Le ./ devant le nom du script indique à bash de chercher le script dans le répertoire courant.
  • Chaque mot après le nom du script devient un argument distinct. Dans ce cas, "hello" est le premier argument, "world" le deuxième et "example" le troisième.
  • Si vous souhaitez passer un argument contenant des espaces, vous devez utiliser des guillemets, comme ceci : ./arguments.sh "hello world" example

Gérer le nombre d'arguments

Modifions notre script pour qu'il s'adapte à différents nombres d'arguments. Nous utiliserons la variable spéciale $#, qui contient le nombre total d'arguments passés au script.

Mettez à jour votre fichier arguments.sh avec le contenu suivant :

#!/bin/bash

if [ $## -eq 0 ]; then
  echo "No arguments provided."
elif [ $## -eq 1 ]; then
  echo "One argument provided: $1"
elif [ $## -eq 2 ]; then
  echo "Two arguments provided: $1 and $2"
else
  echo "More than two arguments provided:"
  echo "First argument: $1"
  echo "Second argument: $2"
  echo "Third argument: $3"
  echo "Total number of arguments: $#"
fi

Ce script utilise des structures conditionnelles pour traiter les différents cas de figure selon le nombre d'arguments.

Pour les débutants :

  • $# est une variable spéciale qui contient le nombre d'arguments transmis au script.
  • [ $## -eq 0 ] est une condition qui vérifie si le nombre d'arguments est égal à 0.
  • elif est la contraction de "else if". Cela permet de vérifier plusieurs conditions à la suite.
  • L'opérateur -eq signifie "equal to" (égal à). Il existe d'autres opérateurs comme -lt (plus petit que), -gt (plus grand que), etc.

Tester le script mis à jour

Testons maintenant notre script mis à jour avec différents nombres d'arguments :

./arguments.sh
./arguments.sh one
./arguments.sh one two
./arguments.sh one two three four

Vous devriez voir des messages différents selon le nombre d'arguments fournis.

Pour les débutants :

  • Lancer le script sans aucun argument (./arguments.sh) déclenchera la première condition de notre script.
  • Chaque commande suivante ajoute des arguments, démontrant comment notre script gère les différents cas.
  • Remarquez comment le comportement du script change en fonction du nombre d'arguments. Ce type de flexibilité est très utile dans les scripts réels.

Parcourir tous les arguments avec une boucle

Enfin, modifions notre script pour parcourir tous les arguments fournis en utilisant la variable spéciale $@, qui représente l'ensemble des arguments de la ligne de commande.

Mettez à jour votre fichier arguments.sh avec le contenu suivant :

#!/bin/bash

echo "Total number of arguments: $#"
echo "All arguments:"

count=1
for arg in "$@"; do
  echo "Argument $count: $arg"
  count=$((count + 1))
done

Ce script utilise une boucle for pour itérer sur tous les arguments et les afficher avec leur position respective.

Pour les débutants :

  • $@ est une variable spéciale qui contient tous les arguments passés au script.
  • La boucle for est utilisée pour parcourir une liste d'éléments. Ici, elle parcourt tous les arguments.
  • $((count + 1)) est une expansion arithmétique en bash. Elle est utilisée pour incrémenter la variable de compteur.
  • Ce script fonctionnera quel que soit le nombre d'arguments, ce qui le rend plus flexible que nos versions précédentes.

Tester le script final

Testons notre script final avec plusieurs arguments :

./arguments.sh apple banana cherry date

Vous devriez voir un résultat similaire à celui-ci :

Total number of arguments: 4
All arguments:
Argument 1: apple
Argument 2: banana
Argument 3: cherry
Argument 4: date

Cela démontre que notre script peut désormais gérer n'importe quel nombre d'arguments et les afficher tous.

Pour les débutants :

  • Cette version finale du script est beaucoup plus polyvalente que les précédentes.
  • Elle peut gérer n'importe quel nombre d'arguments, de zéro à plusieurs.
  • Le script numérote désormais chaque argument, ce qui peut être très utile dans des scripts plus complexes.
  • Essayez de lancer le script avec différents nombres d'arguments pour observer son comportement.

Résumé

Dans cet atelier, vous avez appris à créer un script Shell capable d'accepter et de traiter des arguments en ligne de commande. Vous avez exploré plusieurs concepts clés :

  1. Création et transformation d'un script en fichier exécutable.
  2. Accès aux arguments individuels via des variables spéciales ($1, $2, etc.).
  3. Utilisation de la variable $## pour déterminer le nombre d'arguments.
  4. Implémentation d'une logique conditionnelle pour gérer différents nombres d'arguments.
  5. Utilisation de la variable $@ pour parcourir tous les arguments fournis à l'aide d'une boucle.

Ces compétences sont fondamentales en programmation Shell et vous permettront de créer des scripts plus puissants et adaptables à diverses entrées. Au fur et à mesure que vous développerez vos compétences en Shell, vous constaterez que la gestion des arguments est cruciale pour concevoir des outils polyvalents et réutilisables pour l'administration système et l'automatisation.