Comment utiliser Getopts pour analyser une option de script

Comment utiliser Getopts pour analyser une option de script

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 utilisant Sudo 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 errexitModifie 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…