GNU/Linux >> Znalost Linux >  >> Linux

Bash četl příkaz

Bash se dodává s řadou vestavěných příkazů, které můžete použít na příkazovém řádku nebo ve skriptech shellu.

V tomto článku prozkoumáme vestavěné read příkaz.

Bash read Vestavěný #

read je vestavěný příkaz bash, který přečte řádek ze standardního vstupu (nebo z deskriptoru souboru) a rozdělí řádek na slova. První slovo je přiřazeno křestnímu jménu, druhé druhému atd.

Obecná syntaxe read vestavěný má následující podobu:

read [options] [name...]

Chcete-li ilustrovat, jak příkaz funguje, otevřete svůj terminál a zadejte read var1 var2 a stiskněte „Enter“. Příkaz počká, až uživatel zadá vstup. Napište dvě slova a stiskněte „Enter“.

read var1 var2Hello, World!

Slova jsou přiřazena ke jménům, která jsou předána do read příkaz jako argumenty. Použijte echo nebo printf pro ověření:

echo $var1echo $var2
Hello, World!

Místo psaní na terminálu můžete standardní vstup předat read pomocí jiných metod, jako je potrubí, here-string nebo heredoc:

echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
read a echo jsou uzavřeny v závorkách a spouštěny ve stejném podshell.
Hello, World!

Zde je příklad s použitím řetězce here a printf :

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

Když není poskytnut žádný argument pro read příkazu REPLY je přiřazen celý řádek proměnná:

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

Pokud je počet argumentů dodaných ke read je větší než počet slov přečtených ze vstupu, zbývající slova jsou přiřazena k příjmení:

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

V opačném případě, pokud je počet argumentů menší než počet názvů, bude zbývajícím názvům přiřazena prázdná hodnota:

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

Ve výchozím nastavení read interpretuje zpětné lomítko jako znak escape, což může někdy způsobit neočekávané chování. Chcete-li zakázat escapování zpětného lomítka, vyvolejte příkaz s -r možnost.

Níže je uveden příklad, jak read funguje při vyvolání s a bez -r možnost:

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

Obecně byste měli vždy používat read pomocí -r možnost.

Změna oddělovače #

Výchozí chování read je rozdělit řádek na slova pomocí jedné nebo více mezer, tabulátorů a nového řádku jako oddělovačů. Chcete-li jako oddělovač použít jiný znak, přiřaďte jej k IFS proměnná (Internal Field Separator).

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

Když IFS je nastaven na jiný znak než mezera nebo tabulátor, slova jsou oddělena přesně jedním znakem:

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

Řádek je rozdělen na čtyři slova. Druhé slovo je prázdná hodnota představující segment mezi oddělovači. Je vytvořen, protože jsme použili dva oddělovací znaky vedle sebe (:: ).

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

K rozdělení řádku můžete použít více než jeden oddělovač. Při zadávání více oddělovačů přiřaďte znaky k IFS proměnná bez mezery mezi nimi.

Zde je příklad použití _ - jako oddělovače:

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

Řetězec výzvy #

Při psaní interaktivních bash skriptů můžete použít read příkaz k získání uživatelského vstupu.

Chcete-li zadat řetězec výzvy, použijte -p volba. Výzva se vytiskne před read se provede a nezahrnuje nový řádek.

Zde je jednoduchý příklad:

read -r -p "Are you sure?"

Obecně byste použili read příkaz uvnitř while smyčka, která uživatele přinutí poskytnout jednu z očekávaných odpovědí.

Níže uvedený kód vyzve uživatele k restartování systému:

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

Pokud skript shellu žádá uživatele o zadání citlivých informací, jako je heslo, použijte -s možnost, která říká read netisknout vstup na terminál:

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

Přiřadit slova k poli #

Chcete-li přiřadit slova k poli místo názvů proměnných, vyvolejte read příkaz s -a možnost:

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

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

Když je zadáno pole i název proměnné, všechna slova jsou přiřazena k poli.

Závěr č.

read příkaz se používá k rozdělení řádku vstupu na slova.


Linux
  1. Bash Script - příklad Hello World

  2. bash sh - příkaz nenalezen

  3. Spusťte příkaz bash na jenkins pipeline

  1. Příkaz „eval“ v Bash?

  2. spouštění apachectl z bash

  3. příkaz pro export bash

  1. Vysvětlení příkazu Bash trap

  2. Bash - příkaz Datum a mezera

  3. Bash, pokud na jednom řádku