Comment créer un menu de sélection à l'aide de l'instruction SELECT dans Bash Shell
- 3342
- 794
- Thomas Richard
Nous utilisons tous très souvent des scripts bash pour automatiser les tâches ennuyeuses et répétitives. Parfois, dans nos scripts, nous devons demander
L'utilisateur pour effectuer un ou plusieurs choix de manière interactive: dans ce tutoriel, nous verrons comment utiliser l'instruction Bash Shell Select pour effectuer une telle opération dans très peu de lignes de code.
Dans ce tutoriel, vous apprendrez:
- Comment utiliser l'instruction BASH SELECT
- Comment personnaliser l'invite de menu Sélectionner
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Indépendant de la distribution |
Logiciel | La coquille de bash |
Autre | Aucune exigence spéciale |
Conventions | # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier |
L'instruction SELECT
Le script est l'une des compétences les plus courantes qu'un administrateur système doit posséder, afin d'automatiser
tâches et les rendre moins sujets à l'erreur. Dans des cas pas trop complexes, le shell est l'outil parfait à utiliser pour le travail. Bash, le Bourne à nouveau Shell, est la coque la plus utilisée dans le monde GNU / Linux. Ce shell fournit le très utile sélectionner
déclaration. Son objectif est décrit de la manière suivante:
Sélectionnez des mots dans une liste et exécutez les commandes
La description est assez explicite. L'instruction nous permet de recevoir de manière interactive une entrée d'un utilisateur, de générer une liste numérotée de choix et de l'inciter à en sélectionner un. Voyons comment il est utilisé:
Sélectionnez Nom [en mots…;] DO Commandes; fait
La syntaxe est très similaire à celle d'un traditionnel pour boucle
en bash, sauf pour l'utilisation du sélectionner
mot-clé. L'instruction SELECT, cependant, fonctionne d'une manière différente. Voyons un exemple. Supposons que nous voulons demander à un utilisateur de sélectionner l'un des fichiers contenus dans un répertoire. Voici ce que nous pourrions écrire:
$ files = "$ (ls -a .) "$ sélectionner le nom de fichier dans $ fichiers; faire écho" $ fichier "; fait 1) fichier1 2) fichier2 3) file3 #?
Expliquons ce que nous avons fait. Tout d'abord, nous avons obtenu une liste de tous les fichiers présents dans le répertoire (dans ce cas le répertoire de travail actuel) en utilisant le LS
commander et spécifier le -UN
Option (abréviation pour --presque toutes
), afin d'exclure le .
et …
à partir de la liste retournée, que nous avons affecté au des dossiers
variable.
Nous avons ensuite procédé à l'utilisation du sélectionner
déclaration. Ce qui précède est un exemple très basique: nous avons fourni le résultat de l'expansion du déposer
variable comme la liste des choix à inclure. Notez que nous avons évité de citer l'expansion $ fichiers
exprès, afin d'obtenir division des mots: Lorsqu'une expansion est citée avec des citations doubles division des mots est supprimé, de sorte que les espaces ne sont pas utilisés comme délimiteurs de mots et le résultat de l'expansion est considéré comme un ensemble. Ce n'est pas ce que nous voulons dans ce cas: nous avons besoin que chaque mot soit utilisé comme choix dans le menu généré.
Les mots obtenus à partir de l'expansion de la variable sont imprimés sur le stderr
(erreur standard). Chacun est précédé et associé à un nombre, ce que l'utilisateur utilisera pour le référencer. Une fois tous les éléments affichés, l'utilisateur est invité à entrer son choix. Ce qui est affiché est le PS3
invite, qui, par défaut, est défini sur #?
.
Que se passe-t-il lorsque l'utilisateur effectue une sélection? Voyons:
$ files = "$ (ls -a .) "$ sélectionner le nom de fichier dans $ fichiers; faire echo" vous avez sélectionné $ nom de fichier "; fait 1) fichier1 2) fichier2 3) file3 #? 1 Vous avez sélectionné Fichier1 #?
Le choix que nous avons fait, 1
, est lu dans le stdin
(entrée standard) et si le numéro entré est parmi les disponibles, le mot correspondant («file1» dans l'exemple) est attribué au,nom de fichier
variable. Dans notre exemple, nous avons spécifié Echo "$ nom de fichier"
Comme la commande à exécuter une fois le choix effectué: en conséquence: le mot sélectionné est imprimé à l'écran. Le numéro que nous entrons pour spécifier notre choix est également stocké dans une variable: RÉPONDRE
.
Vous remarquerez peut-être qu'une chose étrange s'est produite dans l'exemple ci-dessus: une fois que nous avons effectué notre choix, après l'exécution de la commande, nous avons été à nouveau invité à un choix, pourquoi? Cela s'est produit parce que nous n'avons pas fourni un casser
commande. Nous pouvons facilement résoudre ce problème:
$ files = "$ (ls -a .) "$ sélectionner le nom de fichier dans $ fichiers; faire écho" vous avez sélectionné $ nom de fichier "; pause; fait 1) fichier1 2) fichier2 3) file3 #? 1 Vous avez sélectionné Fichier1
Et si nous ne fournissons aucune sélection? L'invite est simplement répétée jusqu'à ce que nous le fassions:
Sélectionnez le nom de fichier dans $ fichiers; faire echo "vous avez sélectionné $ nom de fichier"; casser; fait 1) fichier1 2) fichier2 3) fichier3 #? 1) fichier1 2) fichier2 3) fichier3 #?
Et si nous entrons un nombre qui n'est pas dans la liste à la place? Dans ce cas, la variable que nous utilisons, nom de fichier dans notre cas, est définie sur nul
.
Changer l'invite de sélection
Comme nous l'avons déjà vu, l'invite utilisée par le shell dans le contexte d'une instruction SELECT est la PS3
invite, qui par défaut, a le #?
La chaîne a une valeur. Ce n'est pas très convivial, donc nous voulons peut-être le changer et utiliser quelque chose de plus descriptif à la place. Comment peut-on faire ça? Très simple: nous devons modifier la valeur du PS3
paramètre:
$ Ps3 = "Veuillez saisir votre choix:"
La prochaine fois que nous utiliserons le sélectionner
déclaration, nous remarquerons le changement:
Sélectionnez le nom de fichier dans $ fichiers; faire echo "vous avez sélectionné $ nom de fichier $ réponse"; casser; fait 1) fichier1 2) fichier2 3) fichier 3 entrez votre choix:
La modification apportée à la variable ne sera efficace que pour la section de coquille actuelle et, si nous exporter
La variable, également dans tous ses enfants:
$ export ps3 = "Veuillez saisir votre choix:"
Le changement, cependant, reste temporaire jusqu'à ce que nous définissions le PS3
variable à l'intérieur du .bashrc
déposer. PS3 n'est qu'une des invites utilisées dans Bash: Vérifiez notre article de Bash Invite si vous voulez en savoir plus sur le sujet.
Conclusions
Dans ce tutoriel, nous avons appris à utiliser le bash sélectionner
déclaration. Nous avons vu comment cela fonctionne et comment nous pouvons l'utiliser pour créer un menu de sélection pour demander de manière interactive à un utilisateur d'effectuer un choix. Enfin, nous avons vu comment personnaliser l'invite affichée dans le menu de sélection en modifiant le shell PS3
paramètre.
Tutoriels Linux connexes:
- Masterring Bash Script Loops
- Une introduction à l'automatisation Linux, des outils et des techniques
- Boucles imbriquées dans les scripts bash
- Choses à installer sur Ubuntu 20.04
- Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
- Mint 20: Mieux que Ubuntu et Microsoft Windows?
- Gestion de la saisie des utilisateurs dans les scripts bash
- Tutoriel de débogage GDB pour les débutants
- Système linux hung? Comment s'échapper vers la ligne de commande et…
- Comment configurer un serveur OpenVPN sur Ubuntu 20.04