Comment utiliser Getopts pour analyser une option de script
- 1089
- 30
- Lucas Bernard
Objectif
Apprenez à utiliser le bash getopts
intégré pour analyser une option de script
Système d'exploitation et versions logicielles
- Système opérateur: - Toutes les distributions Linux
Exigences
- Aucune exigence spéciale, juste l'accès à une coquille bash
Difficulté
MOYEN
Conventions
- # - nécessite que les commandes Linux soient exécutées avec des privilèges racine
directement en tant qu'utilisateur racine ou en utilisantSudo
commande - $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier
Introduction
La modification d'un comportement de script bash via des options d'exécution, tout comme nous le faisons normalement avec les programmes de ligne de commande, peut être très utile. La coquille de bash fournit le getopts
Commande intégrée, un moyen standard d'y parvenir. Comment l'utiliser est ce que nous apprendrons dans ce tutoriel.
Création de notre script de tests
Aux fins de ce tutoriel, nous allons créer un script de test, et, avec beaucoup de fantasme, nous allons l'appeler test.shot
. Le but de ce script sera de produire quelque chose en fonction de l'option que nous fournirons (ce ne sera pas le script le plus utile au monde, mais il suffira d'expliquer comment les choses fonctionnent).
Ouvrez notre éditeur de texte et commençons:
#!/ bin / bash set -e set -u set -o tuyaufail
Les options de coquille fournies au début des scripts ne sont pas obligatoires, mais c'est une bonne habitude de les utiliser dans chaque script que nous écrivons. En bref, -e
, court pour errexit
Modifie le comportement du shell qui sortira chaque fois qu'une commande sort avec un statut non zéro (à quelques exceptions). -u
est une autre option très importante: cela fait que la coquille traite les variables non définies comme des erreurs.
Finalement, le pipe
change la façon dont les commandes à l'intérieur d'un tuyau sont évaluées. Le statut de sortie d'un tuyau sera celui de la commande la plus à droite pour sortir avec un statut non zéro, ou zéro si tous les programmes du tuyau sont exécutés avec succès. En d'autres termes, le tuyau sera considéré comme un succès si toutes les commandes impliquées sont exécutées sans erreurs.
La construction Getopts
Après cette brève digression, revenons au point principal de ce tutoriel et voyons comment getopts
travaux:
#!/ bin / bash set -e set -u set -o tuypail while while getOpts 'lha:' option; faire cas "$ option" dans l) echo "linuxconfig" ;; h) Echo "h signifie h" ;; a) Avalue = "$ optarg" echo "La valeur fournie est $ optarg" ;; ?) Echo "Utilisation du script: $ (Basename \ $ 0) [-l] [-H] [-a SomeValue]"> & 2 Exit 1 ;; ESAC fait Shift "$ (($ optind -1))"
Analyons ce que nous avons ci-dessus. Tout d'abord le getopts
Les commandes doivent être utilisées à l'intérieur d'un alors que
boucle pour que toutes les options soient analysées. Puis immédiatement après le getopts
mot-clé, nous avons défini les options possibles que notre script acceptera. Ils sont l
, H
et enfin un
.
Que signifie le côlon après cette dernière option? C'est la façon dont nous disons à Getopts que l'option nécessite un argument. Chaque option analysée sera stockée à l'intérieur du $ Option
variable, tandis qu'un argument, lorsqu'il sera présent, deviendra la valeur du$ Optarg
un.
Chaque option est gérée dans une instruction de cas, avec une finale ?
le cas qui sera apparié chaque fois qu'une option qui n'existe pas sera fournie. Dans ce cas, nous ferons simplement écho à l'utilisateur l'utilisation du script correct et quittons un code d'erreur.
Tester notre script
Tout d'abord, nous allons appeler notre script en fournissant une option non existante, juste pour tester le cas que nous avons mentionné ci-dessus. Donnons les autorisations exécutables du script, puis appelons-le:
Test Chmod + X.sh && ./ Tesh.sh -c
Comme prévu, nous recevrons un message nous indiquant que l'option fournie est illégale puis des instructions sur la façon d'utiliser le script:
./test.SH: Option illégale - C Utilisation du script: Test.sh [-l] [-H] [-a quelque valeur
Tandis que le utilisation du script
La chaîne est celle que nous avons définie pour être imprimée sur l'erreur d'utilisation, celle ci-dessus, c'est un message automatiquement généré par getopts
et il peut être désactivé en préfixant les options avec un :
. Voyons maintenant ce qui se passe lorsque nous utilisons le script comme il était censé:
./test.sh -l linuxconfig
Nous avons utilisé le l
Option, et le script a imprimé à l'écran la chaîne que nous définissons dans le cas correspondant, c'est aussi ce qui se passe si nous fournissons le -H
option:
./test.sh -h h signifie h
Essayons maintenant d'appeler le script avec le un
option. Comme indiqué ci-dessus, cette option nécessite un argument et échouera si ce dernier n'est pas fourni:
./test.sh -a ./test.SH: L'option nécessite un argument - une utilisation du script: test.sh [-l] [-H] [-a quelque valeur
Comme prévu, le script a répondu par un message d'erreur, nous rappelant que l'option que nous avons fournie nécessite un argument:
./test.sh -a smoking La valeur fournie est smoking
Cette fois, le script a répondu sans erreur. Remarquez comment l'argument que nous avons fourni, smoking
il est imprimé car il devient la valeur du $ Optarg
variable.
En utilisant getopts
, Vous pouvez également fournir plus d'une option à l'époque à votre script, combinant les drapeaux lorsque vous le lancez. Par exemple, voyons ce qui se passe lorsque nous essayons d'appeler nos scripts avec les deux l
et H
Options:
./test.sh -lh linuxconfig h signifie h
Comme nous pouvons l'observer, les deux options ont été traitées, dans l'ordre que nous leur avons fourni. De malédiction Les options peuvent être données séparément, et nous pouvons également ajouter le un
Option, mais en se souvenant toujours d'ajouter l'argument requis:
./test.sh -l -h -a tux_rulez linuxconfig h signifie h la valeur fournie est tux_rulez
La variable $ optind
Si nous jetons un autre coup d'œil au script très trivial que nous avons écrit ci-dessus, nous voyons une autre instruction à la fin de la boucle while: Shift $ (($ optind -1))
. Quel est son but? Disons que nous appelons le script de cette façon:
./test.Sh -l -h -a Hello World
Lorsque le script est invoqué, le $ Optind
La variable est définie sur 1, et il est incrémenté chaque fois qu'une option est analysée, jusqu'à ce qu'elle atteigne la dernière. Par conséquent, dans ce cas, il aura une valeur de 5 lorsqu'il atteindra le dernier élément, qui est Bonjour
, L'argument obligatoire requis par le -un
option.
changement
est une coquille intégrée qui déplace les paramètres de position du script dans un nombre spécifié de positions qui lui sont fournies comme un nombre positif, en éliminant les arguments connexes.
La façon dont nous avons lancé le script ci-dessus, le dernier argument fourni, «monde», n'est pas analysé par getopts
, qui à ce moment-là a déjà terminé son travail.
Maintenant, si nous faisons un changement de la valeur de $ Optind - 1
(C'est le nombre effectif des options analysées, 4 dans ce cas) Sur les paramètres de position, ce qui reste ne sont que les arguments qui ne sont pas des options, dans ce cas «monde», à laquelle nous pouvons accéder en utilisant le $ *
variable plus tard dans ce script.
Tutoriels Linux connexes:
- Script bash: utilisation des drapeaux avec des exemples d'arguments
- Choses à installer sur Ubuntu 20.04
- Comment effectuer des opérations d'administration avec Ansible…
- Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
- Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
- Commandes Linux de base
- Fichiers de configuration Linux: 30 premiers
- Téléchargement Linux
- Comment imprimer l'arbre du répertoire à l'aide de Linux
- Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
- « Comment restreindre l'accès des utilisateurs sur une machine Linux
- Overclock votre GPU Radeon avec AMDGPU »