Come usare il comando read in Linux

Come usare il comando read in Linux
Immagine della funzione di comando di lettura

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 readcomando e le sue varie opzioni.

In questo articolo verranno illustrate le basi del readcomando e le sue opzioni mediante numerosi esempi di codice.

Che cos’è il comando di lettura?

In Linux, puoi usare il readcomando 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 optionsparametro specifica vari flag che vengono utilizzati per modificare il comportamento del comando read. Inoltre, il nameparametro specifica il nome di più variabili che vengono utilizzate per memorizzare l’input. Se non vengono forniti nomi, l’input viene mantenuto nella $REPLYvariabile 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:

utilizzando il comando read per catturare l'input dall'utente

Ora, dopo aver fornito l’input, visualizziamolo utilizzando il comando echo:

utilizzando il comando echo per visualizzare l'output della variabile REPLY

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 readcomando seguito dal nome della variabile:

lettura del valore di input dell'utente e memorizzazione in una variabile specifica

Ora, per visualizzare il risultato, è necessario utilizzare il echocomando con la variabile che memorizza il valore:

visualizzazione del valore catturato della variabile tramite comando echo

Lettura di più valori

Non esiste un modo diretto per leggere più valori usando il readcomando. Tuttavia, puoi dividere la singola frase di input in più parole e memorizzarle in variabili diverse.

Consideriamo il seguente esempio:

lettura di più valori e memorizzazione in più variabili

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:

visualizzazione di più valori tramite comando echo

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 whileciclo, echoil comando e readil comando seguiti da un nome di variabile specifico:

lettura dal file tramite comando read

Qui, il whileciclo legge ogni riga di “samplefile.txt” e la registra nella variabile line. Dopo aver letto tutte le righe di un file, il echocomando 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:

lettura del valore di input dall'utente in ciclo continuo

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’ -popzione insieme al comando read.

Visualizziamo un prompt personalizzato e catturiamo anche l’input:

creazione di un prompt prima di leggere l'input dell'utente

Limitare l’input dell’utente durante la lettura

Vuoi controllare cosa possono immettere gli utenti? Utilizza l’ -nopzione 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:

lettura dell'input in base al valore del carattere specificato

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:

lettura e suddivisione del valore in base al valore delimitatore specificato

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’ -topzione. 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’ -topzione:

lettura del valore di input entro il tempo specificato

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’ -sopzione del comando read:

utilizzando l'opzione -s con il comando read per nascondere le informazioni

Dopo aver memorizzato la password nella variabile specificata, è possibile visualizzarla nel terminale utilizzando il echocomando:

visualizzazione della password catturata utilizzando l'opzione -e e il comando echo

Qui il -eflag consente l’interpretazione delle sequenze di escape e \nla 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

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