Come usare il comando read in Linux
A volte, mentre interagisci con il tuo sistema Linux, potresti aver bisogno di chiedere agli utenti di inserire un input o di leggere l’input dai file, o persino di impostare dei timeout. Puoi eseguire queste attività e molte altre con il read
comando e le sue varie opzioni.
In questo articolo verranno illustrate le basi del read
comando e le sue opzioni mediante numerosi esempi di codice.
Che cos’è il comando di lettura?
In Linux, puoi usare il read
comando per catturare l’input dell’utente o leggere una riga dall’input standard (stdin). Questo comando legge il numero totale di byte dal descrittore di file specificato e li memorizza nel buffer. Dopodiché, restituisce il numero di byte letti, zero o un errore.
Ad esempio, se il numero o il conteggio è zero, si riferisce alla fine del file. Ma in caso di successo, restituisce il numero di byte letti. Se il comando read trova degli errori, restituisce -1.
Prima di esplorare le opzioni del comando read, diamo un’occhiata alla sintassi del comando read:
Qui, il options
parametro specifica vari flag che vengono utilizzati per modificare il comportamento del comando read. Inoltre, il name
parametro specifica il nome di più variabili che vengono utilizzate per memorizzare l’input. Se non vengono forniti nomi, l’input viene mantenuto nella $REPLY
variabile bash.
Opzioni di comando di lettura
Il comando Bash read ha molte opzioni per controllare l’input dell’utente. Alcune opzioni non hanno bisogno di parametri extra, mentre altre sì.
Esploriamo alcune opzioni che possiamo utilizzare con il comando read:
Opzioni | Descrizioni |
---|---|
-a <matrice> | Memorizza l’input come un array anziché come variabili separate. |
-S | Funziona in modo silenzioso, il che significa che l’input non viene visualizzato sul terminale |
-È | abilita il supporto della libreria readline, consentendo la lettura della riga di input |
-i <prefisso> | fornisce un valore di input iniziale che appare al prompt quando si utilizza readline |
-p <richiesta> | visualizza il prompt specificato prima di leggere l’input |
-u <descrittore file> | legge da un descrittore di file specificato anziché dall’input standard (stdin) |
-d <delimitatore> | consente di specificare un delimitatore di riga di input al posto del carattere di nuova riga predefinito |
-t <tempo> | imposta un periodo di timeout per l’input; se l’input non viene ricevuto entro questo tempo, read restituisce un errore |
-R | se impostato, le barre rovesciate non vengono trattate come caratteri di escape |
-n <numero> | legge solo il numero specificato di caratteri |
Digitare il seguente comando per visualizzare il menu di aiuto del comando di lettura:
Come leggere l’input utilizzando il comando Read
Il modo più semplice per usare il comando read è usarlo senza argomenti o opzioni. Quando esegui il comando read da solo, ti chiederà di fornire l’input che vuoi leggere. Dopo aver fornito l’input, uscirà e lo memorizzerà nella sua variabile predefinita denominata REPLY
.
Prendiamo questo come esempio:
Ora, dopo aver fornito l’input, visualizziamolo utilizzando il comando echo:
Durante la lettura del valore di input, puoi anche memorizzarlo in altre variabili specifiche. Ad esempio, per memorizzare il risultato in una variabile, digita il read
comando seguito dal nome della variabile:
Ora, per visualizzare il risultato, è necessario utilizzare il echo
comando con la variabile che memorizza il valore:
Lettura di più valori
Non esiste un modo diretto per leggere più valori usando il read
comando. Tuttavia, puoi dividere la singola frase di input in più parole e memorizzarle in variabili diverse.
Consideriamo il seguente esempio:
Qui, si memorizza la prima parola della frase nella prima variabile, la seconda parola nella seconda variabile e tutte le parole rimanenti nell’ultima variabile fornita.
Restituiamo l’output utilizzando il seguente comando:
Lettura da un file
Mentre read è principalmente per l’input dell’utente, puoi anche usarlo per leggere le righe da un file. Per farlo, usa semplicemente il while
ciclo, echo
il comando e read
il comando seguiti da un nome di variabile specifico:
Qui, il while
ciclo legge ogni riga di “samplefile.txt” e la registra nella variabile line
. Dopo aver letto tutte le righe di un file, il echo
comando mostra il valore della riga.
Lettura dell’input in un ciclo
Puoi anche catturare l’input dell’utente in una sequenza ripetuta usando una lettura con un ciclo while. Questo è utile quando vuoi raccogliere più input o continuare finché non viene soddisfatta una condizione specifica.
Ad esempio, leggiamo più input e visualizziamoli anche sul terminale:
Inoltre, il ciclo continua finché non riceve un segnale di fine file (EOF), solitamente premendo Ctrl+ D.
Come richiedere input utilizzando il comando Read
Puoi anche creare prompt interattivi che verranno visualizzati prima dell’input dell’utente. Puoi farlo usando l’ -p
opzione insieme al comando read.
Visualizziamo un prompt personalizzato e catturiamo anche l’input:
Limitare l’input dell’utente durante la lettura
Vuoi controllare cosa possono immettere gli utenti? Utilizza l’ -n
opzione con read per specificare la lunghezza desiderata dei caratteri. Ad esempio, se vuoi catturare i primi 4 caratteri dell’input utente, utilizza il comando seguente:
Dopo aver eseguito il comando di cui sopra, ti consente di immettere solo nove caratteri. Limitare l’input dell’utente durante la lettura eliminerà la necessità di un delimitatore e inoltre non suddividerà l’input in parole.
Separazione dei campi di output tramite IFS
Puoi usare la variabile Internal Field Separator (IFS) con il comando read per determinare come dividere l’input in campi separati. Per impostazione predefinita, IFS usa caratteri di spaziatura (tab, newline e spazio) come separatori di campo. Tuttavia, puoi personalizzare IFS in base alle tue esigenze.
Ad esempio, è possibile specificare il valore dei due punti (:) come delimitatore:
Con la variabile IFS è possibile acquisire più input di riga dall’utente e separarli in base al valore del separatore.
Impostazione del timeout in lettura
Puoi anche configurare un timeout per il comando read usando l’ -t
opzione. Questo è utile se vuoi assicurarti che lo script non si basi sull’input dell’utente per un lungo periodo.
Impostiamo un timeout di 10 secondi utilizzando l’ -t
opzione:
Se l’utente non digita nulla entro 10 secondi, l’esecuzione dello script continua.
Come nascondere l’input dell’utente
A volte, potresti voler nascondere l’input dell’utente, ad esempio quando inserisci informazioni sensibili come le password. Puoi ottenere questo risultato usando l’ -s
opzione del comando read:
Dopo aver memorizzato la password nella variabile specificata, è possibile visualizzarla nel terminale utilizzando il echo
comando:
Qui il -e
flag consente l’interpretazione delle sequenze di escape e \n
la sequenza di escape aggiunge una nuova riga prima dell’output.
Avvolgendo
Quando avrai finito di leggere questo articolo e di lavorare sugli esempi, avrai familiarità con l’uso del comando read nel terminale Linux. Tuttavia, ci sono molti altri comandi da esplorare. Continua a leggere per scoprire i comandi di base per i nuovi arrivati.
Credito immagine: Gabriel Heinzer tramite Unsplash . Tutti gli screenshot sono di Haroon Javed.
Lascia un commento