Úvod
Funkce bash je metoda používaná ve skriptech shellu k seskupování opakovaně použitelných bloků kódu. Tato funkce je dostupná pro většinu programovacích jazyků, známých pod různými názvy, jako jsou procedury, metody nebo podprogramy.
Tento článek poskytuje úplný přehled funkcí bash, jak fungují a jak je používat.
Předpoklady
- Systém se systémem Linux.
- Přístup k terminálu a prostředí Bash.
- Textový editor pro psaní bash skriptů (průvodce používá Vim).
Co jsou funkce Bash?
Funkce bash je technika pro seskupování opakovaně použitelných bitů kódu pod jedním názvem pro pozdější použití. Funkce bash je jako skript ve skriptu.
Používání funkcí ve skriptování bash přináší dvě výhody :
1. Funkce je načtena přímo do paměti shellu a uložena pro pozdější použití. Vzhledem k tomu, že paměť počítače není v dnešní době problém, je používání funkcí rychlejší než opakování kódu.
2. Funkce pomáhají organizovat dlouhé skripty shellu do modulárních a opakovaně použitelných bloků kódu. Kusy se snáze vyvíjejí a udržují .
Jak používat funkce Bash?
Existují dva způsoby, jak implementovat funkce Bash:
- Uvnitř skriptu shellu, kde musí být definice funkce před každým voláním funkce.
- Spolu s dalšími příkazy alias bash a přímo v terminálu jako příkaz.
Chcete-li použít funkce bash, postupujte podle následujících pokynů.
Syntaxe funkce Bash
Existují dva různé způsoby, jak deklarovat bash funkci:
1. Nejpoužívanější formát je:
<function name> () {
<commands>
}
Alternativně může být stejnou funkcí jeden řádek:
<function name> () { <commands>; }
2. Alternativním způsobem zápisu funkce bash je použití vyhrazeného slova function
:
function <function name> {
<commands>
}
Nebo na jednom řádku:
function <function name> { <commands>; }
Při používání funkcí vezměte na vědomí následující chování a tipy:
- Při psaní na jeden řádek musí příkazy končit středníkem (
;
), ať už v bash skriptech nebo přímo v terminálu. - Přidání
function
vyhrazené slovo činí závorky volitelnými. - Příkazy mezi složenými závorkami
{ <commands> }
se nazývají tělo funkce . Tělo může obsahovat libovolný počet deklarací, proměnných, cyklů nebo podmíněných příkazů. - Zkuste pro funkce použít popisné názvy. Ačkoli to není nutné při testování funkcí a příkazů, popisné názvy pomáhají v nastavení, kde se na kód dívají ostatní vývojáři.
Jak deklarovat a volat funkci?
Funkce se při deklaraci nespustí. Tělo funkce se spustí při vyvolání po deklaraci. Chcete-li vytvořit bash skript s různými možnostmi syntaxe, postupujte podle následujících kroků:
1. Pomocí svého oblíbeného textového editoru vytvořte skript shellu s názvemsyntaxe . Pokud používáte Vim, spusťte v terminálu následující řádek:
vim syntax.sh
2. Přidejte níže uvedený kód do skriptu shellu:
# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
echo Hello I\'m function 1
echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }
# Declaring functions without the function reserved word
# Multiline
f3 () {
echo Hello I\'m function 3
echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }
# Invoking functions
f4
f3
f2
f1
Skript provede následující:
- Řádky 4–9 demonstrovat, jak definovat funkci pomocí
function
vyhrazené slovo. Funkcef1
používá víceřádkovou syntaxi v řádcích 4-6, zatímcof2
používá jednořádkovou syntaxi na řádku 9. - Řádky 13–18 zobrazit známější syntaxi.
f3
je víceřádková funkce definovaná v řádcích 13-16, zatímcof4
na řádku 18 je ekvivalent jednoho řádku. - Řádky 21–24 vyvolat dříve definované funkce a provést příkazy v tělech odpovídajících funkcí. Volání se provádějí v obráceném pořadí oproti definici.
3. Uložte skript a zavřete Vim:
:wq
4. Vytvořte syntax.sh spustitelný soubor:
chmod +x syntax.sh
5. Nakonec spusťte skript, abyste viděli výstup:
./syntax.sh
Jak deklarovat a volat funkci v terminálu?
Chcete-li deklarovat a používat funkci v terminálu:
1. Otevřete terminál a zadejte následující řádek:
my_function () { echo "Hello I'm a function"; echo "Bye!"; }
2. Spusťte funkci zadáním názvu funkce do terminálu:
my_function
Výstup spustí příkazy v těle funkce.
Funkce zůstane definovaná pouze v aktuální relaci terminálu. Chcete-li uložit pro budoucí relace, přidejte kód do ~/.bashrc soubor.
Kde je definována funkce Bash?
Chcete-li zjistit, kde je funkce bash definována a její obsah, zadejte do terminálu následující příkazy:
1. Spusťte bash shell v režimu debuggeru:
bash --debugger
2. Zkontrolujte zdrojový soubor funkce pomocí:
declare -F <function name>
Například:
declare -F my_function
Výstup vytiskne název funkce, číslo řádku a umístění souboru, kde je definice funkce.
3. Chcete-li zobrazit obsah funkce, spusťte:
declare -f <function name>
Například:
declare -f my_function
declare
vestavěný režim ladění umožňuje prohlížení obsahu a umístění funkce bez spouštění kódu.
Jak odstranit funkci Bash?
Pokud potřebujete uvolnit jmenný prostor obsazený funkcí v aktuální relaci terminálu, spusťte:
unset <function name>
Například:
unset my_function
Funkce již není v aktuální relaci terminálu dostupná. Pokud je však kód v ~/.bashrc soubor, vše se v další relaci vrátí do normálu.
Proměnné funkce Bash
Proměnné v bash jsou ve výchozím nastavení globální a přístupné odkudkoli, včetně těl funkcí. Proměnné definované uvnitř funkce jsou také globální. Přidání klíčového slova local
zpřístupňuje termín pouze v rámci funkce a podřízených funkcí/procesů.
V dynamickém rozsahu , lokální proměnná stíny globální proměnná, když obě nesou stejný název.
Vyzkoušejte následující bash skript, abyste demonstrovali, jak funkční proměnné fungují v bash:
1. Vytvořte skript s názvem variable.sh :
vim variable.sh
2. Přidejte do skriptu následující kód:
var1=1
var2=1
change() {
echo Inside function
echo Variable 1 is: $var1
echo Variable 2 is: $var2
local var1=5
var2=5
echo
echo After change inside function
echo Variable 1 is locally $var1
echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
Skript zobrazuje následující:
- Řádky 1–2 deklarovat proměnné
var1
avar2
a oba je nastavte na1
. - Řádky 5–6 jsou uvnitř těla funkce a vypisují proměnné do konzole. Protože rozsah proměnné je globální, vytisknou se původní hodnoty.
- Řádek 7 deklaruje novou lokální proměnnou se stejným názvem jako globální proměnná
var1
.local var1
stíní globálnívar1
hodnotu díky dynamickému rozsahu. - Řádek 8 změní hodnotu globálního
var2
proměnná. - Řádky 14–22 vytisknout hodnoty proměnných před a po volání funkce.
3. Uložte skript a ukončete Vim:
:wq
4. Změňte oprávnění k souboru na spustitelný soubor:
chmod +x variable.sh
5. Spusťte skript a analyzujte výsledky:
./variable.sh
Hodnoty proměnných se vytisknou do konzole prostřednictvím změn provedených ve skriptu.
Argumenty funkce Bash
Chcete-li předat argumenty funkci, přidejte parametry za volání funkce oddělené mezerami. Níže uvedená tabulka uvádí dostupné možnosti při práci s argumenty funkce bash.
Argument | Role |
---|---|
$0 | Rezervuje název funkce, když je definován v terminálu. Když je definováno ve skriptu bash, $0 vrátí název a umístění skriptu. |
$1 , $2 atd. | Odpovídá pozici argumentu za názvem funkce. |
$# | Uchovává počet pozičních argumentů předávaných funkci. |
[email protected] a $* | Podržte seznam pozičních argumentů a fungujte stejně, když se použije tímto způsobem. |
"[email protected]" | Rozšíří seznam na samostatné řetězce. Například "$1", "$2" atd. |
"$*" | Rozbalí seznam do jednoho řetězce a odděluje parametry mezerou. Například "$1 $2" atd. |
Postupujte podle níže uvedených kroků a otestujte, jak různé argumenty fungují ve funkci.
1. Vytvořte skript s názvem argumenty :
vim arguments.sh
2. Přidejte do skriptu následující kód:
arguments () {
echo The function location is $0
echo There are $# arguments
echo "Argument 1 is $1"
echo "Argument 2 is $2"
echo "<[email protected]>" and "<$*>" are the same.
echo List the elements in a for loop to see the difference!
echo "* gives:"
for arg in "$*"; do echo "<$arg>"; done
echo "@ gives:"
for arg in "[email protected]"; do echo "<$arg>"; done
}
arguments hello world
3. Uložte skript a ukončete Vim:
:wq
4. Nastavte skript jako spustitelný:
chmod +x arguments.sh
5. Spusťte skript:
./arguments.sh
Výstup zobrazuje popisné zprávy pro každý použitý argument.
Návrat funkce Bash
Funkce Bash se liší od většiny programovacích jazyků, pokud jde o vrácení hodnoty z funkce. Ve výchozím nastavení bash vrací stav ukončení posledního provedeného příkazu v těle funkce.
Skript níže ukazuje, jak zadat stav ukončení pomocí return:
1. Vytvořte skript a pojmenujte jej test.sh :
vim test.sh
2. Přidejte do souboru následující funkci:
test_function() {
echo Test
return 100
}
echo The function\'s output is:
test_function
echo The exit status is:
echo $?
3. Uložte a zavřete textový editor:
:wq
4. Změňte oprávnění:
chmod +x test.sh
5. Spusťte skript, abyste viděli výstup funkce a stav ukončení:
./test.sh
Alternativní metoda je zopakovat výsledek funkce a přiřadit výstup proměnné. Upravte soubor test.sh skript s následujícím kódem:
test_function() {
echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use
Tato metoda napodobuje, jak funguje většina programovacích jazyků při používání funkcí.