Introduction
Nous avons déjà examiné comment passer des arguments de ligne de commande à un script bash. Dans ce tutoriel, nous allons jeter un oeil à la façon dont nous pouvons utiliser ces arguments dans le script bash.,
pour en savoir plus:
Comment passer des Arguments de ligne de commande au Script Bash
la Lecture de la Sortie d’une Commande Dans un Tableau en Bash
Traitement de l’Input
Nous allons prendre un regard sur les différentes façons de traiter les arguments passés à un script bash à l’intérieur du script.
2.1. Paramètres positionnels
Les Arguments transmis à un script sont traités dans le même ordre dans lequel ils sont envoyés., L’indexation des arguments commence à un, et le premier argument est accessible dans le script en utilisant $1. De même, le deuxième argument est accessible en utilisant $2, et ainsi de suite. Le paramètre positionnel fait référence à cette représentation des arguments en utilisant leur position.
prenons un exemple de script suivant, userReg-position-paramètre.,sh, qui imprime nom d’utilisateur, l’âge et le nom complet dans cet ordre:
echo "Username: $1";echo "Age: $2";echo "Full Name: $3";
Maintenant, nous allons exécuter ce script avec les trois paramètres d’entrée:
sh userReg-positional-parameter.sh john 25 'John Smith'
La sortie sera:
Username : johnAge: 25Full Name: John Smith
2.2. Flags
l’utilisation de flags est un moyen courant de transmettre des entrées à un script. Lors du passage de l’entrée au script, il y a un drapeau (généralement une seule lettre) commençant par un trait d’union (-) avant chaque argument.
jetons un coup d’oeil à la userReg-flags.sh script, qui prend trois arguments: nom d’utilisateur (-u), âge (-a) et nom complet (- f).,
nous allons modifier le script précédent pour utiliser des drapeaux au lieu de compter sur des paramètres de position., La fonction getopts lit les drapeaux dans L’entrée, et OPTARG fait référence aux valeurs correspondantes:
exécutons ce script avec la même entrée que précédemment, mais cette fois, nous ajouterons des drapeaux à l’entrée:
sh userReg-flags.sh -f 'John Smith' -a 25 -u john
la sortie est la même qu’avant, bien que nous ayons décalé les positions des arguments nom d’utilisateur et nom complet:
Username : johnAge: 25Full Name: John Smith
ici, nous utilisons la fonction GETOPTS pour analyser les indicateurs fournis en entrée, et le bloc case pour affecter la valeur spécifiée à la variable correspondante.
2.3., Loop Construct
Les paramètres de position, bien que pratiques dans de nombreux cas, ne peuvent pas être utilisés lorsque la taille d’entrée est inconnue. L’utilisation d’une construction de boucle est utile dans ces situations.
la variable est le tableau de tous les paramètres d’entrée. En utilisant cette variable dans une boucle for, nous pouvons itérer sur l’entrée et traiter tous les arguments passés.
prenons un exemple de script d’utilisateurs en boucle.,sh, qui imprime tous les noms d’utilisateur qui ont été passés en entrée:
i=1;for user in "" do echo "Username - $i: $user"; i=$((i + 1));done
maintenant, exécutons le script:
sh users-loop.sh john matt bill 'joe wicks' carol
et nous verrons notre sortie:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
dans l’exemple ci-dessus, nous sommes itération de la variable utilisateur sur l’ensemble du tableau de paramètres d’entrée. Cette itération commence au premier argument d’entrée, john, et court jusqu’à la dernière argument, carol, même si la taille de l’entrée est inconnue.
2.4., Opérateur de décalage
l’opérateur de décalage dans bash (syntaxiquement shift n, où n est le nombre de positions à déplacer) décale la position des arguments de ligne de commande. La valeur par défaut de n est un si elle n’est pas spécifiée.
l’opérateur shift fait démarrer l’indexation de l’entrée à partir de la position décalée. En d’autres termes, lorsque cet opérateur est utilisé sur une entrée de tableau, le paramètre de position $1 change de l’argument atteint en décalant n positions vers la droite de l’argument actuel lié au paramètre de position $1.,
considérons un exemple de script qui détermine si l’entrée est impaire ou Pair:
sh parityCheck.sh 13 18 27 35 44 52 61 79 93
D’après la discussion ci-dessus sur le paramètre positionnel, nous savons maintenant que $1 fait référence au premier argument, qui est 13. L’utilisation de l’opérateur shift avec l’entrée 1 (shift 1) provoque le démarrage de l’indexation à partir du deuxième argument. Autrement dit, $1 fait maintenant référence au deuxième argument (18). De même, l’appel de shift 2 entraînera alors le démarrage de l’indexation à partir du quatrième argument (35).
jetons à nouveau un coup d’œil à l’exemple de script d’utilisateurs discuté ci-dessus., Au lieu d’utiliser la variable et d’itérer dessus, nous allons maintenant utiliser l’opérateur shift. La variable returns# renvoie la taille d’entrée:
i=1;j=$#;while do echo "Username - $i: $1"; i=$((i + 1)); shift 1;done
exécutons le script avec la même entrée que ci-dessus:
sh users-shift-operator.sh john matt bill 'joe wicks' carol
la sortie sera la même qu’avant:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
dans cet exemple, nous sommes décaler le paramètre de position dans chaque itération d’un jusqu’à ce que nous atteignions la fin de l’entrée. Par conséquent, $1 fait référence à l’élément suivant dans l’entrée à chaque fois.,
Conclusion
dans cet article, nous avons examiné comment les arguments transmis à un script bash pendant l’exécution peuvent être traités dans le script de différentes manières:
- Les paramètres de position peuvent être utilisés lorsque la taille d’entrée est fixe et que l’ordre des arguments dans l’entrée est connu.
- Avec des drapeaux, l’ordre des arguments dans l’entrée n’a pas d’importance.
- la construction de boucle est utile lorsque la taille d’entrée est inconnue.
- l’opérateur de décalage fait que l’indexation commence à partir de l’argument à la position décalée.,
- La variable renvoie la matrice des paramètres d’entrée, et $# renvoie la taille du tableau d’entrée.
Comme toujours, les exemples utilisés dans cet article sont disponibles sur GitHub.