Argumenty, návratové hodnoty a rozsah platnosti

Úvod do Bash skriptování

Alex Scriven

Data Scientist

Předávání argumentů do bashových funkcí

Předávání argumentů do funkcí je podobné jako předávání argumentů skriptu – používá se zápis $1.

Máte také přístup ke speciálním vlastnostem ARGV, které jsme probrali dříve:

  • K jednotlivým argumentům lze přistupovat pomocí $1, $2 atd.
  • $@ a $* vrátí všechny argumenty z ARGV
  • $# vrátí počet argumentů
Úvod do Bash skriptování

Příklad předávání argumentů

Předáme názvy souborů jako argumenty do funkce, projdeme je cyklem a vypíšeme.

function print_filename {
    echo "The first file was $1"

for file in $@ do echo "This file has name $file" done }
print_filename "LOTR.txt" "mod.txt" "A.py"

 

 

 

The first file was LOTR.txt
This file has name LOTR.txt
This file has name mod.txt
This file has name A.py
Úvod do Bash skriptování

Rozsah platnosti v programování

 

Pojem „rozsah platnosti" (scope) označuje dostupnost proměnné v programu.

  • „Globální" znamená dostupnost odkudkoli v programu – ve smyčkách FOR, podmínkách IF, funkcích atd.
  • „Lokální" znamená dostupnost pouze v určité části programu.

Proč na tom záleží? Pokus o přístup k proměnné s lokálním rozsahem může způsobit chybu!

Úvod do Bash skriptování

Rozsah platnosti v bashových funkcích

Na rozdíl od většiny programovacích jazyků (např. Pythonu a R) jsou všechny proměnné v Bashi ve výchozím stavu globální.

function print_filename {
    first_filename=$1
}

print_filename "LOTR.txt" "model.txt" echo $first_filename
LOTR.txt

Globální rozsah platnosti může být nebezpečný – zvyšuje riziko nechtěného chování.

Úvod do Bash skriptování

Omezení rozsahu platnosti v bashových funkcích

Pomocí klíčového slova local lze omezit rozsah platnosti proměnné.

function print_filename {
    local first_filename=$1
}

print_filename "LOTR.txt" "model.txt" echo $first_filename


 

Otázka: Proč nedošlo k chybě, ale zobrazil se prázdný řádek?

Odpověď: first_filename byl přiřazen globální první prvek ARGV ($1).

Skript byl spuštěn bez argumentů (bash script.sh), takže výchozí hodnotou je prázdný prvek. Pozor na to!

Úvod do Bash skriptování

Návratové hodnoty

Víme, jak předávat argumenty do funkce – jak je ale získat zpět?

Možnost return v Bashi slouží pouze k určení, zda funkce proběhla úspěšně (0) nebo s chybou (hodnoty 1–255). Výsledek je zachycen v globální proměnné $?.

Dostupné možnosti jsou:

  1. Přiřadit hodnotu do globální proměnné
  2. Použít echo na poslední řádek funkce a zachytit výstup pomocí shellu v shellu
Úvod do Bash skriptování

Chybový návrat

Podívejme se na příklad chybového návratu:

function function_2 {
    echlo # An error of 'echo'
}

function_2 # Call the function echo $? # Print the return value
script.sh: line 2: echlo: command not found
127

Co se stalo?

  1. Při volání funkce došlo k chybě
    • Skript se pokusil najít 'echlo' jako program, ale neexistoval
  2. Návratová hodnota v $? byla 127 (chyba)
Úvod do Bash skriptování

Správné vracení hodnot

Správné vrácení hodnoty pomocí echo a zachycení shellem v shellu:

function convert_temp {
    echo $(echo "scale=2; ($1 - 32) * 5 / 9" | bc)
}

converted=$(convert_temp 30) echo "30F in Celsius is $converted C"
30F in Celsius is -1.11 C
  • Všimněte si, že mezivariáble již nevytváříme.
Úvod do Bash skriptování

Pojďme procvičovat!

Úvod do Bash skriptování

Preparing Video For Download...