Bash Scripting Tutorial-3. Input utente

Input utente!

Rendiamo interattivi i nostri script.

Introduzione

Abbiamo esaminato una forma di input dell’utente (argomenti della riga di comando) nella sezione precedente. Ora vorremmo introdurre altri modi in cui l’utente può fornire input allo script Bash. A seguito di questo avremo una discussione su quando e dove è meglio utilizzare ogni metodo.

Dopo la sezione precedente mammut questo è molto più facile da ottenere attraverso.,

Chiedi all’utente l’input

Se vogliamo chiedere all’utente l’input, usiamo un comando chiamato read. Questo comando prende l’input e lo salverà in una variabile.

leggi var1

Diamo un’occhiata a un semplice esempio:

Scomponiamolo:

  • Riga 4 – Stampa un messaggio che chiede all’utente l’input.
  • Linea 6-Eseguire il comando read e salvare la risposta degli utenti nella variabile varname
  • Linea 8-echo un altro messaggio solo per verificare il comando read funzionato. Nota: Ho dovuto mettere un backslash ( \ ) davanti all ‘ in modo che fosse sfuggito.,
  1. . /introduction.sh
  2. Ciao, con chi sto parlando?
  3. Ryan
  4. È bello conoscerti Ryan
  • Nota: Ryan sopra è in corsivo solo per mostrare che era qualcosa che ho digitato. Sul vostro ingresso terminale apparirà normalmente.

Altro con Read

È possibile modificare il comportamento di read con una varietà di opzioni della riga di comando. (Vedi la pagina man per leggere per vederli tutti.) Due opzioni comunemente usate tuttavia sono-p che consente di specificare un prompt e-s che rende l’input silenzioso., Questo può rendere più facile chiedere una combinazione di nome utente e password come nell’esempio seguente:

  • Sulle righe 4 e 5 sopra includiamo il prompt tra virgolette in modo da poter avere uno spazio incluso con esso. Altrimenti l’input dell’utente inizierà subito dopo l’ultimo carattere del prompt che non è l’ideale dal punto di vista della leggibilità.
  1. . /login.sh
  2. Nome utente: ryan
  3. Password:
  4. Grazie ryan ora abbiamo i tuoi dati di accesso

Altre variabili

Finora abbiamo esaminato una singola parola come input. Tuttavia possiamo fare di più.,

cars.sh

  1. #!/ bin / bash
  2. # Dimostrare come leggere effettivamente funziona
  3. echo Quali auto ti piace?
  4. leggi car1 car2 car3
  5. echo La tua prima auto era: car car1
  6. echo La tua seconda auto era: car car2
  7. echo La tua terza auto era: car car3
  1. ./cars.sh
  2. Quali macchine ti piacciono?
  3. Jaguar Maserati Bentley
  4. La tua prima auto era: Jaguar
  5. La tua seconda auto era: Maserati
  6. La tua terza auto era: Bentley
  7. . / cars.sh
  8. Quali macchine ti piacciono?,
  9. Jaguar Maserati Bentley Lotus
  10. La tua prima auto era: Jaguar
  11. La tua seconda auto era: Maserati
  12. La tua terza auto era: Bentley Lotus

Il meccanismo generale è che puoi fornire diversi nomi di variabili da leggere. Read prenderà quindi il tuo input e lo dividerà su spazi bianchi. Il primo elemento verrà quindi assegnato al primo nome della variabile, il secondo elemento al secondo nome della variabile e così via. Se ci sono più elementi rispetto ai nomi delle variabili, gli elementi rimanenti verranno tutti aggiunti all’ultimo nome della variabile., Se ci sono meno elementi rispetto ai nomi delle variabili, i nomi delle variabili rimanenti verranno impostati su blank o null.

Lettura da STDIN

È comune in Linux convogliare una serie di semplici comandi a scopo singolo insieme per creare una soluzione più ampia su misura per le nostre esigenze esatte. La capacità di fare questo è uno dei veri punti di forza di Linux. Si scopre che possiamo facilmente ospitare questo meccanismo anche con i nostri script. In questo modo possiamo creare script che fungono da filtri per modificare i dati in modi specifici per noi.

Bash accoglie tubazioni e reindirizzamento tramite file speciali., Ogni processo ottiene il proprio set di file (uno per STDIN, STDOUT e STDERR rispettivamente) e sono collegati quando viene invocata la piping o il reindirizzamento.,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.,

Quindi, se vogliamo rendere il nostro script in grado di elaborare i dati che vengono convogliati ad esso, tutto ciò che dobbiamo fare è leggere il file pertinente. Tutti i file sopra menzionati si comportano come file normali.

Scomponiamolo:

  • Linee 4, 5, 6 – Stampa un titolo per l’output
  • Linea 8 – cat il file che rappresenta STDIN, taglia impostando il delimitatore su uno spazio, i campi 2 e 3 quindi ordina l’output.

Quindi quale dovrei usare?,

Quindi ora abbiamo 3 metodi per ottenere input dall’utente:

  • Argomenti della riga di comando
  • Leggi l’input durante l’esecuzione dello script
  • Accetta i dati che sono stati reindirizzati nello script Bash tramite STDIN

Quale metodo è il migliore dipende dalla situazione.

Si dovrebbe normalmente favorire gli argomenti della riga di comando, ove possibile. Sono i più convenienti per gli utenti in quanto i dati verranno memorizzati nella cronologia dei comandi in modo che possano tornare facilmente ad esso. È anche l’approccio migliore se il tuo script può essere chiamato da altri script o processi (ad es., forse vuoi che venga eseguito periodicamente usando CRON).

A volte la natura dei dati è tale che non sarebbe l’ideale per essere memorizzati nelle storie di comando dei popoli, ecc. Un buon esempio di ciò sono le credenziali di accesso (nome utente e password). In queste circostanze è meglio leggere i dati durante l’esecuzione dello script.

Se tutto lo script sta elaborando i dati in un certo modo, probabilmente è meglio lavorare con STDIN. In questo modo può essere facilmente aggiunto in una pipeline.

A volte potresti scoprire che una combinazione è l’ideale., L’utente può fornire un nome file come argomento della riga di comando e, in caso contrario, lo script elaborerà ciò che trova su STDIN (quando guardiamo le istruzioni If vedremo come ciò può essere raggiunto). O forse gli argomenti della riga di comando definiscono un determinato comportamento, ma read viene anche usato per chiedere ulteriori informazioni se necessario.

Infine dovresti pensare a 3 fattori quando decidi come gli utenti forniranno dati al tuo script Bash:

  • Facilità d’uso – quale di questi metodi renderà più facile per gli utenti usare il mio script?,
  • Sicurezza-Ci sono dati sensibili che dovrei gestire in modo appropriato?
  • Robustezza-Posso fare in modo che il mio funzionamento script è intuitivo e flessibile e anche rendere più difficile fare errori semplici?

Sommario

leggi varName Leggi l’input dall’utente e memorizzalo nella variabile varName. / dev / stdin Un file che puoi leggere per ottenere lo STDIN per lo script Bash
Usabilità La tua scelta dei metodi di input avrà un impatto su quanto sia utilizzabile il tuo script.

Attività

Dilettiamoci con l’input.,

  • Crea un semplice script che chiederà all’utente alcune informazioni, quindi combina questo in un messaggio che viene eco sullo schermo.
  • Aggiungi allo script precedente per aggiungere alcuni dati provenienti dagli argomenti della riga di comando e forse alcune delle altre variabili di sistema.
  • Crea uno script che prenderà i dati da STDIN e stamperà solo la 3a riga.
  • Ora gioca con la creazione di uno script che si comporterà come un filtro., Creare uno script che riorganizzerà l’output del comando ls-l in modo utile (ad esempio, forse si stampa solo il nome del file, la dimensione e il proprietario) (Suggerimento: awk può essere utile qui).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *