Úvod do Bash skriptování
Alex Scriven
Data Scientist
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:
$1, $2 atd.$@ a $* vrátí všechny argumenty z ARGV$# vrátí počet 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
Pojem „rozsah platnosti" (scope) označuje dostupnost proměnné v programu.
Proč na tom záleží? Pokus o přístup k proměnné s lokálním rozsahem může způsobit chybu!
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í.
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!
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:
echo na poslední řádek funkce a zachytit výstup pomocí shellu v shelluPodí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?
$? byla 127 (chyba)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
Úvod do Bash skriptování