Linux : créez des scripts qui prennent en compte des arguments
Ce tutoriel vous apprend à ajouter des arguments à vos scripts Bash, ce qui permet de simplifier et d’automatiser une grande variété de tâches sur les serveurs Linux.
Les scripts shell Linux permettent aux administrateurs de créer des tâches et de les automatiser à l’aide d’un outil tel que cron. Les scripts shell peuvent être aussi simples qu’une commande sur une seule ligne, ou peuvent contenir plusieurs lignes imbriquées qui exécutent de nombreuses tâches.
Les scripts shell sont souvent appelés scripts Bash, car Bash est le shell par défaut le plus courant sous Linux. Ils font appel à un ou plusieurs exécutables pour gérer diverses tâches. Vous pouvez utiliser les scripts Bash pour transmettre des arguments à ces exécutables, ce qui signifie que vous n’avez pas à modifier le script lorsque les valeurs liées à ces exécutables changent.
Par exemple, si vous utilisez AppX dans un script shell et que AppX vous demande de lui faire savoir que DIRECTORYZ est l’emplacement qui abrite les données nécessaires à l’accomplissement de sa tâche, vous pourriez écrire une ligne dans le script shell qui dirait quelque chose comme :
/usr/bin/AppX -d /DIRECTORYZ
Lorsque vous ne voulez plus que AppX utilise DIRECTORYZ, ou si AppX doit utiliser un jeu de données provenant d’autres répertoires selon la situation, vous pouvez soit éditer manuellement cette ligne dans le script pour refléter le jeu de données correct, soit utiliser des arguments.
Que sont les arguments ?
Les arguments représentent les différentes options passées à une commande. Prenons l’exemple suivant :
ls -I README file 'file 1' file2
Nous avons ici une commande suivie de cinq arguments :
- /usr/bin/ls, la commande en elle-même est considérée comme l’argument No 0,
- -I, le premier argument, qui indique à ls d’ignorer l’argument No 2,
- file, un fichier à lister,
- file 1, le fichier suivant à lister,
- et file2, le dernier fichier à lister.
Dans un script, on désigne les arguments selon l’ordre dans lequel ils ont été renseignés, en les appelant $0, $1, $2, $3, $4, etc. Avec ces variables, il devient possible de traiter à l’intérieur d’un script les paramètres indiqués dans la ligne de commande qui exécute ce script.
Création d’un script pour utiliser des arguments
Créons un nouveau script Bash à l’aide la commande :
nano script.sh
Dans ce script, collez ce qui suit :
#!/bin/bash
echo "Total Number of Arguments:" $#
echo "Argument values:" $@
La première ligne indique au script d’utiliser Bash. Un script simple vous permet d’entrer des arguments qui sont transmis au script et ensuite utilisés pour la sortie.
La section suivante du script indique le nombre total d’arguments qui sont passés au script, puis affiche la valeur de chacun des arguments.
$# correspond au nombre d’arguments passés à un script. Vous pouvez entrer autant d’arguments que vous le souhaitez. Lorsque vous utilisez cette variable, elle met automatiquement le premier terme de la ligne de commande (la commande elle-même) dans la variable $0, son premier argument dans $1, le second dans $2 et ainsi de suite.
La deuxième variable, $@, correspond à l’ensemble des arguments tels qu’ils ont été saisis dans la ligne de commande qui a appelé le script.
Enregistrez et fermez le fichier. Donnez-lui la permission d’être exécuté avec la commande :
chmod u+x script.sh
Si vous exécutez le script sans passer d’arguments, son affichage est le suivant :
Total Arguments: 0
All Arguments values:
Au lieu de cela, exécutez le script et passez-lui des arguments :
./script.sh ARG0 ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8 ARG9
L’affichage de cette commande devient alors :
Total Arguments: 10
All Arguments values: ARG0 ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8 ARG9
Vous pouvez rendre ce même script plus utile en le faisant accéder à des arguments spécifiques. Par exemple, si vous voulez afficher plus précisément le premier et le dernier argument, vous pouvez ajouter ces lignes dans votre script :
echo "First Argument:" $1
echo "Tenth Argument:" ${!#}
Notez bien que le script utilise $1 pour le premier argument (ici "ARG0"), car $0 correspond à la commande ./script.sh. La variable {!#} combine le nombre d’arguments (#) avec l’indirection (!). L’indirection vous permet de faire référence à l’argument dont le numéro correspond aussi à autre chose, en l’occurrence ici l’argument qui porte le même numéro que le nombre total d’arguments, donc le dernier.
Si vous exécutez de nouveau le script comme ceci :
./script.sh ARG0 ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8 ARG9
Le résultat sera à présent :
Total Arguments: 10
All Arguments values: ARG0 ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8 ARG9
First Argument: ARG0
Last Argument: ARG9
Écrire des scripts utiles
Vous pouvez rendre ce script un peu plus pratique. Par exemple, vous pouvez créer un script de sauvegarde qui utilise rsync pour sauvegarder un répertoire sur un lecteur USB monté dans le répertoire /backup.
En partant d’un script figé qui pourrait ressembler à ceci :
#!/bin/bash
rsync -av --delete /Directory1/ /backup
Transformez-le pour qu’il utilise le nom de répertoire à sauvegarder que vous saisirez en argument à chaque fois que vous lancerez le script. Le nouveau script ressemble à ceci :
#!/bin/bash
rsync -av --delete $1 /backup
Nommez ce script backup.sh.
Pour les besoins de cet exemple, imaginons que vous souhaitiez sauvegarder un répertoire nommé PROJECT4. Vous lancerez alors votre script de sauvegarde avec la commande :
./backup.sh PROJECT4
Vous pouvez ensuite sauvegarder n’importe quel répertoire en passant le nom du répertoire au script de sauvegarde comme argument.
Vous pouvez vous appuyer sur ces exercices de base pour étendre votre connaissance des arguments. Les scripts Bash peuvent devenir des outils incroyablement puissants pour simplifier les tâches d’administration de Linux.