Úvod
Bash read
command je vestavěný nástroj, který čte text ze standardního vstupu. Tento nástroj nabízí mnoho funkcí pro čtení uživatelského vstupu a pomáhá tak učinit skripty Bash interaktivní.
Tato příručka vysvětluje, jak se Bash read
příkaz pracuje prostřednictvím různých příkladů a případů použití.
Předpoklady
- Přístup k příkazovému řádku/terminálu.
- Základy práce s proměnnými prostředí.
Syntaxe čtení Bash
Syntaxe pro read
Bash příkaz je:
read <options> <arguments>
read
příkaz převezme vstup uživatele a rozdělí řetězec do polí, přičemž každé nové slovo přiřadí argumentu. Pokud je proměnných méně než slov, read
uloží zbývající termíny do konečné proměnné.
Zadání názvů argumentů je volitelné. Příkaz uloží vstup uživatele do $REPLY
ve výchozím nastavení proměnná.
Možnosti čtení Bash
Bash read
Příkaz přichází s mnoha možnostmi ovládání uživatelského vstupu. Některé možnosti nevyžadují další parametry, zatímco jiné mají povinné parametry.
Níže uvedená tabulka ukazuje všechny možné možnosti příkazů a jejich popis.
Možnost | Popis |
---|---|
-a <array> | Přiřadí zadanou posloupnost slov proměnné s názvem <array> . |
-d <delimiter> | Přečte řádek, dokud nezadáte <delimiter> místo nového řádku. |
-e | Spustí interaktivní shellovou relaci pro získání řádku ke čtení. |
-i <prefix> | Přidá počáteční text před čtením řádku jako předponu. |
-n <number> | Vrátí se po přečtení zadaného počtu znaků při respektování oddělovače pro předčasné ukončení. |
-N <number> | Vrátí se po přečtení zadaného počtu znaků, ignoruje oddělovač. |
-p <prompt> | Před čtením uživatelského vstupu vypíše řetězec výzvy. |
-r | Zakažte zpětná lomítka pro únikové znaky. |
-s | Neodpovídá vstupu uživatele. |
-t <time> | Časový limit příkazu vyprší po zadané době v sekundách. |
-u <file descriptor> | Čtení z deskriptoru souboru namísto standardního vstupu. |
Pokračujte ve čtení a zjistěte, jak funguje příkaz read funguje na různých příkladech.
Příklady čtení Bash
read
příkaz funguje bez jakýchkoli argumentů nebo voleb. Chcete-li příkaz otestovat, postupujte podle následujících kroků:
1. Otevřete terminál.
2. Napište příkaz a stiskněte Enter :
read
Výzva čeká na vstup uživatele.
3. Napište větu a stiskněte Enter .
Terminál se vrátí do normálního stavu.
4. Načtěte zprávu pomocí příkazu echo:
echo $REPLY
$REPLY
proměnná ukládá read
příkazová zpráva.
Níže jsou uvedeny příklady demonstrující složitější případy použití pro read
Bash příkaz.
Argumenty
Uložte vstup uživatele do zadané proměnné zadáním argumentu:
read input
Získejte zprávu pomocí:
echo $input
Případně rozdělte uživatelský vstup do různých proměnných přidáním více argumentů.
Například:
read var1 var2
Uživatelský vstup se rozdělí na jednotlivá slova. Získejte je pomocí:
echo $var1
echo $var2
Když uživatelský vstup obsahuje více slov, než je proměnných, další slova jsou přiřazena poslední poskytnuté proměnné:
read var1 var2
foo bar baz
echo $var1
echo $var2
Pokud je slov méně než proměnných, jsou zbývající proměnné prázdné.
Potrubí
Piping přebírá standardní výstup z jednoho příkazu a analyzuje jej jako standardní vstup pro jiný proces. Použijte echo
a informace pomocí kanálu read
pro okamžitou analýzu. Například:
echo "Hello world!" | (read var1 var2; echo $var1; echo $var2)
Závorky vytvářejí subshell s více příkazy a jednotlivé proměnné se tisknou do konzole.
Heredoc
Další způsob, jak vložit text do read
příkaz používá notaci heredoc. Například:
read var1 var2 <<< "Hello world!"
echo $var1
echo $var2
read
příkaz očekává literál vstupního proudu a identifikátor přesměrování (<<<
) zadá herestring.
Oddělovače
read
příkaz definuje dva typy oddělovačů:
1. Oddělovač pro read
příkaz.
Ve výchozím nastavení stiskněte Enter (nový řádek) ukončí příkaz. Přidejte -d
tag a poskytněte jiný oddělovač v uvozovkách pro jiné ukončení.
Například:
read -d "-"
Namísto nového řádku je novým oddělovačem pomlčka (-
) místo nového řádku. Příkaz skončí při dosažení oddělovače, bez ohledu na počet argumentů. Odpověď v $REPLY
nebo poskytnutá proměnná ukládá uživatelský vstup bez pomlčky (-
).
2. Oddělovač pro rozdělení polí.
Proměnná $IFS
(Interní oddělovač polí) ukládá oddělovače slov. Výchozí hodnota, kterou se slova dělí, je mezera " ". Nastavte $IFS
proměnnou na jinou hodnotu pro ovládání tohoto chování.
Chcete-li například slova oddělit pomlčkami, použijte:
IFS="-"
echo "Hello-world!" | (read var1 var2; echo $var1; echo $var2)
Přidejte různé oddělovače k rozdělení polí podle různých hodnot:
IFS="-_"
echo "Hello_world-!" | (read var1 var2 var3; echo $var1; echo $var2; echo $var3)
Oddělovač je dlouhý jeden znak a $IFS
bere každý uvedený oddělovač jednotlivě.
Výzva
Pomocí příkazu read vytvořte interaktivní výzvy. Přidejte -p
tag a zadejte text výzvy, například:
read -p "Enter your username: " username
Text výzvy se vytiskne a vyžaduje vstup uživatele. Text se uloží do proměnné $username
.
echo Your username is $username.
Použijte -p
možnost ve skriptech Bash pro práci s rychlým vytvářením.
Skrýt vstup uživatele
read
příkaz nabízí -s
tag pro skrytí zadávání citlivých informací. Běžným případem použití je kombinace -s
pomocí -p
pro vytvoření výzvy k zadání hesla.
Například:
read -p "Enter your password: "$'\n' -s password
Vstup uživatele je neviditelný. Při opakování zprávy se však zobrazí heslo:
echo $password
Dejte si pozor na toto chování při používání read
ve skriptech, které vyzývají k zadání hesla.
Nastavit limit počtu znaků
Příkaz read nabízí dvě možnosti při omezení počtu znaků pro uživatelský vstup:
1. Použijte -n
a zadejte číslo pro nastavení limitu počtu znaků. Například:
read -n 3
Stiskněte Enter po jednom znaku pro ukončení příkazu před dosažením limitu počtu znaků. Bez stisknutí klávesy Enter , příkaz se po třech znacích automaticky ukončí.
2. Použijte -N
a zadejte číslo pro nastavení limitu znaků při ignorování oddělovače. Například:
read -N 3
Stiskněte Enter neukončí příkaz. Stisk klávesy se však počítá jako znak.
Nastavit časový limit
Nastavte časový limit pro read
pro omezení času potřebného k zadání textu:
read -t 5
Příkaz se automaticky ukončí po uplynutí poskytnutého časového limitu.
Pole
Místo použití jednotlivých proměnných k ukládání řetězce přidejte -a
možnost uložit vstup do pole. Například:
read -a array <<< "Hello world!"
Získejte prvky pole pomocí:
echo ${array[0]}
echo ${array[1]}
Případně použijte k iteraci pole cyklus for.
Escape znaky a zpětná lomítka
read
příkaz umožňuje rozdělení dlouhých vstupů do více řádků pomocí zpětných lomítek. Například:
read password prompt terminal output
Hello \
world\
!
Stiskněte Enter za zpětným lomítkem neukončí příkaz a očekává další vstup na následujícím řádku.
Chcete-li ignorovat interpretaci zpětného lomítka, přidejte -r možnost:
read -r <<< "Hello\world!"; echo $REPLY
Tuto možnost použijte při analýze cest k souboru a jakéhokoli textu, kde má význam zpětné lomítko.