GNU/Linux >> Linux Esercitazione >  >> Linux

Bash ha letto Comando

Bash viene fornito con una serie di comandi integrati che puoi utilizzare sulla riga di comando o negli script della shell.

In questo articolo, esploreremo la read incorporata comando.

Bash read #

integrato

read è un comando integrato di bash che legge una riga dallo standard input (o dal descrittore di file) e divide la riga in parole. La prima parola è assegnata al nome, la seconda al secondo nome e così via.

La sintassi generale di read built-in assume la forma seguente:

read [options] [name...]

Per illustrare come funziona il comando, apri il tuo terminale, digita read var1 var2 e premi "Invio". Il comando attenderà che l'utente inserisca l'input. Digita due parole e premi "Invio".

read var1 var2Hello, World!

Le parole vengono assegnate ai nomi che vengono passati al read comando come argomenti. Usa echo o printf per verificarlo:

echo $var1echo $var2
Hello,
World!

Invece di digitare sul terminale, puoi passare l'input standard a read utilizzando altri metodi come piping, here-string o heredoc:

echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
read e echo sono racchiusi tra parentesi ed eseguiti nella stessa subshell.
Hello,
World!

Ecco un esempio usando una stringa here e printf :

read -r var1 var2 <<< "Hello, World!"printf "var1: %s \nvar2: %s\n" "$var1" "$var2"
Var1: Hello, 
Var2: World! 

Quando non viene fornito alcun argomento a read comando, l'intera riga è assegnata al REPLY variabile:

echo "Hello, world!" | (read; echo "$REPLY")
Hello, World!

Se il numero di argomenti forniti a read è maggiore del numero di parole lette dall'ingresso, le restanti parole vengono assegnate al cognome:

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
Var1: Linux 
Var2: is awesome.

In caso contrario, se il numero di argomenti è inferiore al numero di nomi, ai nomi rimanenti viene assegnato un valore vuoto:

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3")
Var1: Hello, 
Var2: World! 
Var3: 

Per impostazione predefinita, read interpreta la barra rovesciata come un carattere di escape, che a volte può causare comportamenti imprevisti. Per disabilitare l'escape della barra rovesciata, invoca il comando con -r opzione.

Di seguito è riportato un esempio che mostra come read funziona quando viene invocato con e senza -r opzione:

read <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, tWorld!
read -r <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, \tWorld!

In generale, dovresti sempre usare read con il -r opzione.

Modifica del delimitatore #

Il comportamento predefinito di read è dividere la riga in parole usando uno o più spazi, tabulazioni e newline come delimitatori. Per utilizzare un altro carattere come delimitatore, assegnalo a IFS variabile (separatore di campo interno).

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Quando IFS è impostato su un carattere diverso da spazio o tabulazione, le parole sono separate esattamente da un carattere:

echo "Linux::is:awesome." | \  (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3 \nVar4: $var4")

La riga è divisa in quattro parole. La seconda parola è un valore vuoto che rappresenta il segmento tra i delimitatori. È stato creato perché abbiamo utilizzato due caratteri delimitatori uno accanto all'altro(:: ).

Var1: Linux 
Var2:  
Var3: is 
Var4: awesome.

Puoi usare più di un delimitatore per dividere la linea. Quando si specificano più delimitatori, assegnare i caratteri all'IFS variabile senza uno spazio tra di loro.

Ecco un esempio usando _ un - come delimitatori:

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Stringa di richiesta #

Quando scrivi script bash interattivi, puoi usare read comando per ottenere l'input dell'utente.

Per specificare una stringa di richiesta, utilizzare il -p opzione. Il prompt viene stampato prima di read viene eseguito e non include una nuova riga.

Ecco un semplice esempio:

read -r -p "Are you sure?"

In genere, dovresti usare read comando all'interno di un while loop per costringere l'utente a fornire una delle risposte previste.

Il codice seguente richiederà all'utente il riavvio del sistema:

while true; do
    read -r -p "Do you wish to reboot the system? (Y/N): " answer
    case $answer in
        [Yy]* ) reboot; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer Y or N.";;
    esac
done

Se lo script della shell chiede agli utenti di inserire informazioni riservate, come la password, utilizzare -s opzione che dice a read non stampare l'input sul terminale:

read -r -s -p "Enter your password: "

Assegna le parole all'array #

Per assegnare le parole a un array invece di nomi di variabili, invocare read comando con il -a opzione:

read -r -a MY_ARR <<< "Linux is awesome."

for i in "${MY_ARR[@]}"; do 
  echo "$i"
done
Linux 
is 
awesome.

Quando vengono assegnati sia un array che un nome di variabile, tutte le parole vengono assegnate all'array.

Conclusione #

Il read comando viene utilizzato per dividere una riga di input in parole.


Linux
  1. Script Bash - Esempio Hello World

  2. bash sh - comando non trovato

  3. Bash - Comando data e spazio

  4. Esegui il comando bash sulla pipeline jenkins

  5. Bash se su una sola riga

Comando sorgente Bash

Comando della cronologia in Linux (Cronologia di Bash)

Comando di uscita Bash e codici di uscita

Comando Bash printf

Script Bash(II)

Scripting Bash(III)