Bash Scripting Tutorial-3. Entrée utilisateur

entrée utilisateur!

rendons nos scripts interactifs.

Introduction

Nous avons regardé un formulaire de saisie de l’utilisateur (arguments de ligne de commande) dans la section précédente. Maintenant, nous aimerions présenter d’autres façons dont l’utilisateur peut fournir une entrée au script Bash. Après cela, nous aurons une discussion sur le moment et l’endroit où il est préférable d’utiliser chaque méthode.

Après la section précédente de mammouth, celle-ci est beaucoup plus facile à traverser.,

Demander à l’Utilisateur d’Entrée

Si, nous voudrions demander à l’utilisateur pour l’entrée, puis nous utilisons une commande de lecture. Cette commande prend l’entrée et l’enregistrer dans une variable.

read var1

prenons un exemple simple:

nous allons le décomposer:

  • Ligne 4 – Imprimer un message demandant à l’utilisateur pour l’entrée.
  • ligne 6-exécutez la commande read et enregistrez la réponse des utilisateurs dans la variable varname
  • ligne 8-echo un autre message juste pour vérifier que la commande read a fonctionné. Note: j’ai dû mettre une barre oblique inverse ( \ ) devant le ‘ pour qu’il soit échappé.,
  1. ./introduction.sh
  2. Bonjour, qui suis-je en train de parler?
  3. Ryan
  4. Il est agréable de vous rencontrer Ryan
  • Note: Ryan ci-dessus est en italique juste pour montrer que c’était quelque chose que j’ai tapé. Sur votre terminal, l’entrée apparaîtra normalement.

plus avec Read

Vous pouvez modifier le comportement de read avec une variété d’options de ligne de commande. (Voir la page de manuel pour lire pour les voir tous.) Deux options couramment utilisées sont cependant-p qui vous permet de spécifier une invite et-s qui rend l’entrée silencieuse., Cela peut faciliter la demande d’une combinaison nom d’utilisateur et mot de passe comme l’exemple ci-dessous:

  • sur les lignes 4 et 5 ci-dessus, nous incluons l’invite entre guillemets afin que nous puissions avoir un espace inclus avec elle. Sinon, l’entrée utilisateur commencera juste après le dernier caractère de l’invite, ce qui n’est pas idéal du point de vue de la lisibilité.
  1. ./login.sh
  2. nom d’utilisateur: ryan
  3. Mot de passe:
  4. Merci ryan nous avons maintenant vos détails de connexion

variables

jusqu’à présent, nous avons regardé un seul mot en entrée. Nous pouvons faire plus que cela cependant.,

cars.sh

  1. #!/bin/bash
  2. # démontrer comment fonctionne réellement read
  3. echo quelles voitures aimez-vous?
  4. lire car1 personnages car2 car3
  5. echo de Votre première voiture: $car1
  6. echo Votre deuxième voiture a été: $personnages car2
  7. echo Votre troisième voiture a été: $car3

  1. ./cars.sh
  2. Ce que les voitures aimez-vous?
  3. Jaguar, Maserati et Bentley
  4. Votre première voiture: Jaguar
  5. Votre deuxième voiture a été: Maserati
  6. Votre troisième voiture a été: Bentley
  7. ./cars.sh
  8. Ce que les voitures aimez-vous?,
  9. Jaguar, Maserati et Bentley, Lotus
  10. Votre première voiture: Jaguar
  11. Votre deuxième voiture a été: Maserati
  12. Votre troisième voiture a été: Bentley, Lotus

Le mécanisme général est que vous pouvez fournir plusieurs noms de variables à lire. Read prendra ensuite votre entrée et la divisera en espaces. Le premier élément sera alors affecté au premier nom de variable, le deuxième élément au deuxième nom de variable et ainsi de suite. S’il y a plus d’éléments que de noms de variables, les éléments restants seront tous ajoutés au dernier nom de variable., S’il y a moins d’éléments que de noms de variables, les noms de variables restants seront définis sur blank ou null.

lecture de STDIN

Il est courant sous Linux de canaliser ensemble une série de commandes simples et à usage unique pour créer une solution plus vaste adaptée à nos besoins exacts. La possibilité de le faire est l’une des véritables forces de Linux. Il s’avère que nous pouvons facilement accueillir ce mécanisme avec nos scripts également. Ce faisant, nous pouvons créer des scripts qui agissent comme des filtres pour modifier les données de manière spécifique pour nous.

Bash accueille la tuyauterie et la redirection au moyen de fichiers spéciaux., Chaque processus obtient son propre ensemble de fichiers (un pour STDIN, STDOUT et STDERR respectivement) et ils sont liés lorsque la tuyauterie ou la redirection est appelée.,ollowing files:

  • STDIN – /proc/<processID>/fd/0
  • STDOUT – /proc/<processID>/fd/1
  • STDERR – /proc/<processID>/fd/2

To make life more convenient the system creates some shortcuts for us:

  • STDIN – /dev/stdin or /proc/self/fd/0
  • STDOUT – /dev/stdout or /proc/self/fd/1
  • STDERR – /dev/stderr or /proc/self/fd/2

fd in the paths above stands for file descriptor.,

Donc, si nous tenons à notre script en mesure de traiter des données qui est transmis à tout ce que nous devons faire est de lire le fichier. Tous les fichiers mentionnés ci-dessus se comportent comme des fichiers normaux.

décomposons:

  • lignes 4, 5, 6 – imprime un titre pour la sortie
  • ligne 8 – cat le fichier représentant STDIN, coupe en définissant le délimiteur sur un espace, les champs 2 et 3 puis trie la sortie.

alors que dois-je utiliser?,

Nous avons donc maintenant 3 méthodes pour obtenir l’entrée de l’utilisateur:

  • arguments de ligne de commande
  • Lire l’entrée pendant l’exécution du script
  • accepter les données qui ont été redirigées dans le script Bash via STDIN

Quelle méthode est la meilleure dépend de la situation.

Vous devriez normalement privilégier les arguments de ligne de commande dans la mesure du possible. Ils sont les plus pratiques pour les utilisateurs car les données seront stockées dans leur historique de commandes afin qu’ils puissent facilement y revenir. C’est également la meilleure approche si votre script peut être appelé par d’Autres scripts ou processus (par exemple., peut-être que vous voulez qu’il s’exécute périodiquement en utilisant CRON).

Parfois, la nature des données est telle qu’il ne serait pas idéal pour être stockés dans les peuples de commande histoires etc. Un bon exemple de ceci est les informations de connexion (nom d’utilisateur et mot de passe). Dans ces circonstances, il est préférable de lire les données pendant l’exécution du script.

Si tout ce que le script fait traite les données d’une certaine manière, il est probablement préférable de travailler avec STDIN. De cette façon, il peut facilement être ajouté dans un pipeline.

Parfois, vous pouvez constater qu’une combinaison est idéale., L’utilisateur peut fournir un nom de fichier en tant qu’argument de ligne de commande et sinon, le script traitera ce qu’il trouve sur STDIN (lorsque nous examinons les instructions If, nous verrons comment cela peut être réalisé). Ou peut-être que les arguments de ligne de commande définissent certains comportements, mais read est également utilisé pour demander plus d’informations si nécessaire.

en fin de compte, vous devriez penser à 3 facteurs pour décider comment les utilisateurs fourniront des données à votre script Bash:

  • facilité d’utilisation – laquelle de ces méthodes rendra plus facile pour les utilisateurs d’utiliser mon script?,
  • sécurité – y a-t-il des données sensibles que je devrais gérer de manière appropriée?
  • Robustesse-puis-je faire en sorte que le fonctionnement de mes scripts soit intuitif et flexible et qu’il soit également plus difficile de faire des erreurs simples?

Résumé

lire varName Lire l’entrée de l’utilisateur et de les stocker dans la variable varName. / dev / stdin un fichier que vous pouvez lire pour obtenir le STDIN pour le script Bash
utilisabilité votre choix de méthodes d’entrée aura un impact sur la façon dont votre script est utilisable.

Activités

nous allons mêler avec d’entrée.,

  • créez un script simple qui demandera à l’Utilisateur quelques informations, puis combinez-les en un message qui sera répercuté à l’écran.
  • ajouter au script précédent pour ajouter des données provenant d’arguments de ligne de commande et peut-être d’autres variables système.
  • créez un script qui prendra les données de STDIN et imprimera la 3ème ligne uniquement.
  • jouez maintenant avec la création d’un script qui se comportera comme un filtre., Créez un script qui réorganisera la sortie de la commande ls-l de manière utile (par exemple, vous n’imprimerez peut-être que le nom du fichier, la taille et le propriétaire) (indice: awk peut être utile ici).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *