GNU/Linux >> Znalost Linux >  >> Linux

Bash funkce

Funkce Bash je v podstatě sada příkazů, které lze volat mnohokrát. Účelem funkce je pomoci vám učinit vaše bash skripty čitelnějšími a vyhnout se opakovanému psaní stejného kódu. Ve srovnání s většinou programovacích jazyků jsou funkce Bash poněkud omezené.

V tomto tutoriálu pokryjeme základy funkcí Bash a ukážeme vám, jak je používat ve skriptech shellu.

Definování bashových funkcí #

Syntaxe pro deklaraci bash funkce je přímočará. Funkce mohou být deklarovány ve dvou různých formátech:

  1. První formát začíná názvem funkce, za nímž následují závorky. Toto je preferovaný a více používaný formát.

    function_name () {
      commands
    }

    Jednořádková verze:

    function_name () { commands; }
  2. Druhý formát začíná vyhrazeným slovem function , následovaný názvem funkce.

    function function_name {
      commands
    }

    Jednořádková verze:

    function function_name { commands; }

Je třeba poznamenat několik bodů:

  • Příkazy mezi složenými závorkami ({} ) se nazývají tělo funkce. Složené závorky musí být odděleny od těla mezerami nebo novými řádky.
  • Definováním funkce nedojde k jejímu provedení. Chcete-li vyvolat funkci bash, jednoduše použijte název funkce. Příkazy mezi složenými závorkami se provádějí vždy, když je funkce volána ve skriptu shellu.
  • Definice funkce musí být umístěna před jakýmkoli voláním funkce.
  • Při použití jednořádkových „kompaktovaných“ funkcí středník ; musí následovat za posledním příkazem ve funkci.
  • Vždy se snažte, aby názvy funkcí byly popisné.

Abyste tomu lépe porozuměli, podívejte se na následující příklad:

~/hello_world.sh
#!/bin/bash

hello_world () {
   echo 'hello, world'
}

hello_world

Pojďme analyzovat kód řádek po řádku:

  • Na řádku 3 definujeme funkci jejím názvem. Složená závorka { označuje začátek těla funkce.
  • Řádek 4 je tělo funkce. Tělo funkce může obsahovat více příkazů, příkazů a deklarací proměnných.
  • Řádek 5 , uzavírací složená závorka } , definuje konec hello_world funkce.
  • V řádku 7 provádíme funkci. Funkci můžete spustit tolikrát, kolikrát potřebujete.

Pokud skript spustíte, vypíše hello, world .

Rozsah proměnných #

Globální proměnné jsou proměnné, ke kterým lze přistupovat odkudkoli ve skriptu bez ohledu na rozsah. V Bash jsou všechny proměnné standardně definovány jako globální, i když jsou deklarovány uvnitř funkce.

Lokální proměnné lze deklarovat v těle funkce pomocí local klíčové slovo a lze jej použít pouze v rámci této funkce. V různých funkcích můžete mít lokální proměnné se stejným názvem.

Abychom lépe ilustrovali, jak rozsah proměnných funguje v Bash, uvažujme tento příklad:

~/variables_scope.sh
#!/bin/bash

var1='A'
var2='B'

my_function () {
  local var1='C'
  var2='D'
  echo "Inside function: var1: $var1, var2: $var2"
}

echo "Before executing function: var1: $var1, var2: $var2"

my_function

echo "After executing function: var1: $var1, var2: $var2"

Skript začíná definováním dvou globálních proměnných var1 a var2 . Pak je tu funkce, která nastavuje lokální proměnnou var1 a upravuje globální proměnnou var2 .

Pokud skript spustíte, měli byste vidět následující výstup:

Before executing function: var1: A, var2: B
Inside function: var1: C, var2: D
After executing function: var1: A, var2: D

Z výše uvedeného výstupu můžeme usoudit, že:

  • Pokud je v těle funkce nastavena lokální proměnná se stejným názvem jako existující globální proměnná, bude mít přednost před globální proměnnou.
  • Globální proměnné lze měnit z funkce.

Vrácené hodnoty #

Na rozdíl od funkcí ve „skutečných“ programovacích jazycích vám funkce Bash neumožňují při volání vrátit hodnotu. Po dokončení funkce bash je její návratová hodnota stavem posledního příkazu provedeného ve funkci, 0 pro úspěch a nenulové desetinné číslo v rozsahu 1 - 255 pro neúspěch.

Návratový stav lze určit pomocí return klíčové slovo a je přiřazeno k proměnné $? . return příkaz ukončí funkci. Můžete si to představit jako stav ukončení funkce.

~/return_values.sh
#!/bin/bash

my_function () {
  echo "some result"
  return 55
}

my_function
echo $?
some result
55

Abychom skutečně vrátili libovolnou hodnotu z funkce, musíme použít jiné metody. Nejjednodušší možností je přiřadit výsledek funkce do globální proměnné:

~/return_values.sh
#!/bin/bash

my_function () {
  func_result="some result"
}

my_function
echo $func_result
some result

Další, lepší možností, jak vrátit hodnotu z funkce, je poslat hodnotu do stdout pomocí echoor printf jako je uvedeno níže:

~/return_values.sh
#!/bin/bash

my_function () {
  local func_result="some result"
  echo "$func_result"
}

func_result="$(my_function)"
echo $func_result
some result

Namísto prostého provedení funkce, která vytiskne zprávu na stdout, přiřadíme výstup funkce k func_result proměnnou pomocí $() substituce příkazů. Proměnnou lze později použít podle potřeby.

Předávání argumentů funkcím Bash #

Chcete-li předat funkci bash libovolný počet argumentů, jednoduše je vložte za název funkce a oddělte je mezerou. Je dobrým zvykem argumenty citovat dvakrát, abyste se vyhnuli chybné analýze argumentu s mezerami.

  • Předávané parametry jsou $1 , $2 , $3$n , odpovídající pozici parametru za názvem funkce.
  • $0 proměnná je vyhrazena pro název funkce.
  • $# proměnná obsahuje počet pozičních parametrů/argumentů předávaných funkci.
  • $* a $@ proměnné obsahují všechny poziční parametry/argumenty předané funkci.
    • Pokud je uveden ve dvojitých uvozovkách, "$*" expanduje na jeden řetězec oddělený mezerou (první znak IFS) - "$1 $2 $n" .
    • Pokud je uveden ve dvojitých uvozovkách, "$@" expanduje na samostatné řetězce - "$1" "$2" "$n" .
    • Pokud není uvedeno ve dvojitých uvozovkách, $* a $@ jsou stejné.

Zde je příklad:

~/passing_arguments.sh
#!/bin/bash

greeting () {
  echo "Hello $1"
}

greeting "Joe"
Hello Joe

Závěr č.

Funkce Bash je blok opakovaně použitelného kódu navržený k provedení konkrétní operace. Jakmile je funkce definována, může být v rámci skriptu volána vícekrát.

Můžete si také přečíst o tom, jak použít funkci Bash k vytvoření zapamatovatelného zkratkového příkazu pro delší příkaz.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. V Bash, kdy alias, kdy skript a kdy napsat funkci?

  2. Jak vytvářet a volat funkce v Bash

  3. 9 výkonných vestavěných funkcí Awk pro numerické funkce

  1. Funkce Bash pro nalezení nejnovějšího vzoru pro shodu souborů

  2. Jak zruším nastavení nebo se zbavím funkce bash?

  3. Vysvětlena manipulace s funkcí Bash

  1. Funkce v proměnných Shell?

  2. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?

  3. Bash Beginner Series #9:Použití funkcí v Bash