Bash Scripting Tutorial-3. Intrare utilizator

intrare utilizator!

să facem scripturile noastre interactive.

Introducere

am analizat o formă de introducere a utilizatorului (argumente în linia de comandă) în secțiunea anterioară. Acum ne-ar dori să introducă alte moduri utilizatorul poate furniza intrare la script-ul Bash. După aceasta, vom avea o discuție despre când și unde este cel mai bine să folosiți fiecare metodă.

după secțiunea anterioară mamut aceasta este mult mai ușor pentru a obține prin intermediul.,

cere utilizatorului pentru intrare

dacă am dori să cerem utilizatorului pentru intrare, atunci vom folosi o comandă numită citire. Această comandă preia intrarea și o va salva într-o variabilă.

citiți var1

să ne uităm la un exemplu simplu:

să – l descompunem:

  • Linia 4-Imprimați un mesaj care solicită utilizatorului introducerea.
  • linia 6-Rulați comanda citiți și salvați răspunsul utilizatorilor în variabila varname
  • linia 8-echo un alt mesaj doar pentru a verifica comanda de citire a funcționat. Notă: am avut de a pune un backslash ( \ ) în fața ‘ s, astfel încât a fost scăpat.,
  1. . /introduction.sh
  2. Bună ziua, cu cine vorbesc?
  3. Ryan
  4. este frumos să te cunosc Ryan
  • notă: Ryan de mai sus este în italice doar pentru a arăta că a fost ceva ce am tastat în. Pe intrarea terminalului dvs. va apărea în mod normal.

mai mult cu Read

aveți posibilitatea de a modifica comportamentul de citire cu o varietate de opțiuni de linie de comandă. (Consultați pagina man pentru citire pentru a le vedea pe toate.) Cu toate acestea, două opțiuni utilizate în mod obișnuit sunt-p care vă permite să specificați un prompt și-s care face ca intrarea să fie silențioasă., Acest lucru poate facilita solicitarea unei combinații de nume de utilizator și parolă, cum ar fi exemplul de mai jos:

  • pe liniile 4 și 5 de mai sus, includem promptul în ghilimele, astfel încât să putem avea un spațiu inclus cu acesta. În caz contrar, intrarea utilizatorului va începe imediat după ultimul caracter al promptului, care nu este ideal din punct de vedere al lizibilității.
  1. ./login.sh
  2. Utilizator: ryan
  3. Parola:
  4. Multumesc ryan avem acum datele de autentificare

Mai multe variabile

Deci, acum ne-am uitat la un singur cuvânt de intrare. Cu toate acestea, putem face mai mult decât atât.,

cars.sh

  1. #!/bin/bash
  2. # demonstrați cum funcționează read de fapt
  3. ecou ce mașini îți plac?
  4. citeste car1 car2 car3
  5. echo a fost prima Ta mașină: $car1
  6. echo a doua mașină a fost: $car2
  7. echo a treia mașină a fost: $car3
  1. ./cars.sh
  2. Ce masini iti plac?prima ta mașină a fost: Jaguar
  3. a doua mașină a fost: Maserati
  4. a treia mașină a fost: Bentley
  5. . / cars.sh
  6. ce mașini îți plac?,prima ta mașină a fost: Jaguar
  7. a doua mașină a fost: Maserati
  8. a treia mașină a fost: Bentley Lotus

mecanismul general este că puteți furniza mai multe nume de variabile pentru a citi. Read va lua apoi datele introduse și le va împărți pe spații albe. Primul element va fi apoi atribuit primului nume de variabilă, al doilea element celui de-al doilea nume de variabilă și așa mai departe. Dacă există mai multe elemente decât nume de variabile, atunci elementele rămase vor fi adăugate la ultimul nume de variabilă., Dacă există mai puține elemente decât numele variabilelor, atunci numele variabilelor rămase vor fi setate la blank sau null.

citirea de la STDIN

este obișnuit în Linux să punem împreună o serie de comenzi simple, cu un singur scop, pentru a crea o soluție mai mare adaptată nevoilor noastre exacte. Abilitatea de a face acest lucru este unul dintre punctele forte reale ale Linux. Se pare că putem găzdui cu ușurință acest mecanism și cu scripturile noastre. Procedând astfel, putem crea scripturi care acționează ca filtre pentru a modifica datele în moduri specifice pentru noi.Bash găzduiește conducte și redirecționare prin intermediul fișierelor speciale., Fiecare proces devine propriul set de fișiere (unul pentru STDIN, STDOUT și STDERR respectiv) și acestea sunt legate atunci când conducte sau redirecționare este invocată.,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.,deci, dacă ne-ar dori să facă script-ul nostru capabil de a procesa date care este conectat la ea tot ce trebuie să facem este să citiți fișierul relevant. Toate fișierele menționate mai sus se comportă ca fișiere normale.

să – l rupe în jos:

  • linii 4, 5, 6 – imprima un titlu pentru ieșire
  • linia 8-cat fișierul reprezentând STDIN, tăiat setarea delimitatorului într-un spațiu, câmpurile 2 și 3, apoi sortați ieșirea.

deci, care ar trebui să folosesc?,

deci, acum avem 3 metode pentru a obține de intrare de la utilizator:

  • argumente de linie de comandă
  • citește de intrare în timpul executării script
  • accepta date care a fost redirecționat în script-ul Bash prin STDIN

care metoda este cel mai bine depinde de situație.

în mod normal, ar trebui să favorizați argumentele liniei de comandă ori de câte ori este posibil. Acestea sunt cele mai convenabile pentru utilizatori, deoarece datele vor fi stocate în istoricul comenzilor lor, astfel încât să poată reveni cu ușurință la acesta. De asemenea, este cea mai bună abordare dacă scriptul dvs. poate fi apelat de alte scripturi sau procese (de ex., poate doriți să ruleze periodic folosind CRON).uneori, natura datelor este de așa natură încât nu ar fi ideal pentru a fi stocate în istorii de comandă popoare etc. Un bun exemplu în acest sens sunt acreditările de conectare (nume de utilizator și parolă). În aceste condiții, cel mai bine este să citiți datele în timpul executării scriptului.

dacă tot scriptul este de a face este prelucrarea datelor într-un anumit mod, atunci este, probabil, cel mai bine pentru a lucra cu STDIN. În acest fel se poate adăuga cu ușurință într-o conductă.uneori este posibil să descoperiți că o combinație este ideală., Utilizatorul poate furniza un nume de fișier ca argument în linia de comandă și, dacă nu, atunci scriptul va procesa ceea ce găsește pe STDIN (când ne uităm dacă declarațiile vom vedea cum se poate realiza acest lucru). Sau poate argumentele din linia de comandă definesc un anumit comportament, dar read este, de asemenea, utilizat pentru a cere mai multe informații, dacă este necesar.în mod Ultimat, ar trebui să vă gândiți la 3 factori atunci când decideți modul în care utilizatorii vor furniza date scriptului Bash:

  • ușurința în utilizare – care dintre aceste metode va face mai ușor pentru utilizatori să folosească scriptul meu?,
  • securitate-există date sensibile pe care ar trebui să le gestionez în mod corespunzător?
  • robustețe-pot face în așa fel încât funcționarea scripturilor Mele să fie intuitivă și flexibilă și, de asemenea, să îngreuneze greșelile simple?

rezumat

citiți varName citiți intrarea de la utilizator și stocați-o în variabila varName. / dev / stdin un fișier pe care îl puteți citi pentru a obține STDIN pentru scriptul Bash
uzabilitate alegerea dvs. de metode de introducere va avea un impact asupra modului de utilizare a scriptului dvs.

activități

să se ocupe cu intrare.,

  • creați un script simplu care va cere utilizatorului câteva informații, apoi combinați acest lucru într-un mesaj care este ecou pe ecran.
  • adauga la script-ul anterior pentru a adăuga în unele date provenind din argumente linie de comandă și poate unele dintre celelalte variabile de sistem.
  • creați un script care va prelua date de la STDIN și va imprima numai linia a 3-a.
  • acum juca Despre cu crearea unui script care se va comporta ca un filtru., Creați un script care va rearanja ieșirea comenzii ls-l într-un mod util (de exemplu, poate imprimați doar numele fișierului, dimensiunea și proprietarul) (sugestie: awk poate fi util aici).

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *