Bash je poměrně výkonný jazyk pro programování a je také docela snadné s ním začít.
Koneckonců, je to téměř univerzálně shell, který uvidíte, když otevřete svůj terminál. Díky tomu je nesmírně užitečné si na něj zvyknout.
V Bash jsou některé mocné příkazy, o kterých možná nevíte, i když jste v používání jazyka poměrně zkušení. Všechny tyto příkazy však mohou sloužit docela užitečným účelům a mohou udělat skripty, které píšete, čistší, lépe udržovatelné a přímo výkonnější, než mohly být dříve.
Čtení:Vyžádání vstupu od uživatele
Příkaz read vám umožňuje převzít vstup od uživatele a uložit jej do proměnné.
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"
To bude čekat na vstup od vás, uživatele, a poté nastaví hodnotu pro name
proměnná na řetězec, který zadáte.
Pokud jste například zadali své jméno jako Linux Handbook
při spuštění výše uvedeného skriptu vypíše Your name is Linux Handbook!
.
Výše uvedený příklad můžete také učinit kompaktnějším zadáním -p
možnost read
příkaz, který vypíše řetězec zadaný za -p
a poté požádejte uživatele o zadání:
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"
Také si všimnete, že jsem přidal mezeru za What is your name?
. Pokud bychom to nepřidali, doslova by to vypsalo What is your name?
bez mezery, takže by to vypadalo trochu divněji, když uživatel zadává svůj vstup:

Mapový soubor:Přiřazení proměnné hodnot řádků souboru
Můžete použít mapfile
příkaz k načtení obsahu souboru a poté přiřazení tohoto výstupu do pole Bash, přičemž každá položka pole se vytvoří vždy, když se v souboru objeví nový řádek.
Vytvořme například soubor s názvem file.txt
který obsahuje následující text:
Line 1
Line 2
Line 3
Line 4
Line 5
Tento soubor můžete převést na pole Bash spuštěním následujícího, který přiřadí obsah souboru k file_var
proměnná:
#!/usr/bin/env bash
mapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done

Všimnete si, že výše uvedené vytváří také nějaký podivně rozložený výstup, který se neshoduje s tím, co je uvnitř souboru, což lze vyřešit přidáním -t
možnost do mapfile
příkaz:
#!/usr/bin/env bash
mapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done

Nakonec si můžete všimnout, že následující nefunguje:
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var
Důvodem je mapfile
příkaz na pravé straně roury je spuštěn v subshell (nebo jinými slovy v nové instanci Bash), který nemůže ovlivnit váš aktuální shell.
Zdroj:Vložte proměnné ze souboru do prostředí vašeho shellu
Řekněme, že máte následující imaginární soubor config.sh
, s následujícím obsahem:
username=linuxhandbook
domain=linuxhandbook.com
Co kdybyste chtěli vzít obsah tohoto souboru a vložit jej do vašeho aktuálního prostředí shellu?
To lze provést zcela jednoduše pomocí příkazu source:
source config.sh
Poté můžete zkontrolovat, zda byly proměnné přiřazeny podle očekávání:

Pod kapotou je source
příkaz skutečně spouští zadaný soubor v prostředí vašeho aktuálního shellu, takže zadání jakýchkoli příkazů do tohoto souboru by ve skutečnosti způsobilo jejich spuštění při spuštění source
.
Například do config.sh
vložíme následující :
name="Linux Handbook"
echo "Hello ${name}!"
echo "Have a good day!"
Pokud potom spustíme soure config.sh
, uvidíte, že dva echo
spouštějí se příkazy a také name
přiřazení proměnné:

Můžete také použít .
místo source
, který se chová stejným způsobem jako source
by.
Zabalení
A stejně tak jste dále na cestě k provádění výkonnějších a užitečnějších úkolů a přitom budete moci zůstat uvnitř Bash.
Existují nějaké další příkazy, které často používáte v Bash? Neváhejte a zanechte kteroukoli z nich v komentářích níže.