Vous pouvez écrire un script bash de sorte qu'il reçoive les arguments spécifiés lors de son appel à partir de la ligne de commande. Cette méthode est utilisée lorsqu'un script doit exécuter une fonction légèrement différente en fonction des valeurs des paramètres d'entrée (les arguments).
Par exemple, vous pouvez avoir un script appelé "stats.sh" qui effectue une opération particulière sur un fichier, telle que le comptage de ses mots. Si vous souhaitez pouvoir utiliser ce script sur de nombreux fichiers, il est préférable de passer le nom du fichier en tant qu'argument afin que vous puissiez utiliser le même script pour tous les fichiers à traiter. Par exemple, si le nom du fichier à traiter est "songlist", vous devez entrer la ligne de commande suivante:
sh stats.sh liste de chansons
Les arguments sont accessibles dans un script en utilisant les variables $ 1, $ 2, $ 3, etc., où $ 1 se réfère au premier argument, $ 2 au second argument, etc. Ceci est illustré dans l'exemple suivant:
FICHIER1 = 1 $wc $ FILE1
Pour plus de lisibilité, affectez une variable avec un nom descriptif à la valeur du premier argument ($ 1), puis appelez l'utilitaire de comptage de mots (wc) sur cette variable ($ FILE1).
Si vous avez un nombre variable d'arguments, vous pouvez utiliser la variable "$ @", qui est un tableau de tous les paramètres d'entrée. Cela signifie que vous pouvez utiliser une boucle for pour traiter chaque opération de manière itérative, comme illustré dans l'exemple suivant:
pour FILE1 dans "$ @"fairewc $ FILE1terminé
Voici un exemple d'appeler ce script avec des arguments de la ligne de commande:
sh stats.sh songlist1 songlist2 songlist3
Si un argument a des espaces, vous devez le mettre entre guillemets simples. Par exemple:
sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'
Fréquemment, un script est écrit de sorte que l'utilisateur puisse passer des arguments dans n'importe quel ordre en utilisant des indicateurs. Avec la méthode flags, vous pouvez également rendre certains des arguments facultatifs.
Supposons qu'un script récupère les informations d'une base de données en fonction de paramètres spécifiés, tels que "nom d'utilisateur", "date" et "produit", et génère un rapport dans un "format" spécifié. Vous souhaitez maintenant écrire votre script afin de pouvoir transmettre ces paramètres lors de l'appel du script. Cela pourrait ressembler à ceci:
makereport -u jsmith -p ordinateurs portables -d 10-20-2011 -f pdf
Bash active cette fonctionnalité avec la fonction "getopts". Pour l'exemple ci-dessus, vous pouvez utiliser getopts comme suit:
pendant que getopts u: d: p: f: optionfairecase "$ {option}"dansu) USER = $ {OPTARG} ;;d) DATE = $ {OPTARG} ;;p) PRODUIT = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;esacterminé
Il s'agit d'une boucle while utilisant la fonction "getopts" et une "optstring", dans ce cas "u: d: p: f:", pour parcourir les arguments. La boucle while parcourt la chaîne optstring, qui contient les indicateurs pouvant être utilisés pour transmettre des arguments, et attribue la valeur d'argument fournie pour cet indicateur à la variable "option". L'instruction case assigne ensuite la valeur de la variable "option" à une variable globale pouvant être utilisée une fois que tous les arguments ont été lus.
Les deux points dans la chaîne optstring signifient que des valeurs sont requises pour les indicateurs correspondants. Dans l'exemple ci-dessus, tous les drapeaux sont suivis de deux points: "u: d: p: f:". Cela signifie que tous les drapeaux ont besoin d'une valeur. Si, par exemple, les indicateurs "d" et "f" n'étaient pas censés avoir une valeur, la chaîne optstring serait "u: dp: f".
Un deux-points au début de l'optstring, par exemple ": u: d: p: f:", a une signification complètement différente. Il vous permet de gérer des drapeaux qui ne sont pas représentés dans la chaîne optstring. Dans ce cas, la valeur de la variable "option" est définie sur "?" et la valeur de "OPTARG" est définie sur l'indicateur inattendu. Le vous permet d'afficher un message d'erreur approprié informant l'utilisateur de l'erreur.
Les arguments qui ne sont pas précédés d'un indicateur sont ignorés par getopts. Si les indicateurs spécifiés dans optstring ne sont pas fournis lors de l'appel du script, rien ne se produit, sauf si vous gérez spécialement ce cas dans votre code. Tous les arguments non gérés par les getops peuvent toujours être capturés avec les variables normales $ 1, $ 2, etc.