Introductie tot Bash-scripting
Alex Scriven
Data Scientist
Argumenten doorgeven aan functies lijkt op hoe je ze aan een script doorgeeft: met $1.
Je hebt ook toegang tot de speciale ARGV-eigenschappen die we eerder zagen:
$1, $2, enz.$@ en $* geven alle argumenten in ARGV$# geeft het aantal argumentenWe geven bestandsnamen als argumenten aan een functie. We loopen erdoor en printen ze.
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
‘Scope’ in programmeren is hoe toegankelijk een variabele is.
Waarom is dit belangrijk? Als je iets met alleen lokale scope probeert te gebruiken, kan je programma falen met een fout!
In tegenstelling tot de meeste talen (zoals Python en R) zijn variabelen in Bash standaard globaal.
function print_filename { first_filename=$1 }print_filename "LOTR.txt" "model.txt" echo $first_filename
LOTR.txt
Let op: globale scope kan riskant zijn; meer kans op onbedoelde effecten.
Je kunt het keyword local gebruiken om de scope van variabelen te beperken.
function print_filename { local first_filename=$1 }print_filename "LOTR.txt" "model.txt" echo $first_filename
V: Waarom geen foutmelding, maar een lege regel?
Antwoord: first_filename werd toegewezen aan de globale eerste ARGV-waarde ($1).
Ik draaide het script zonder argumenten (bash script.sh), dus dat is leeg. Wees dus voorzichtig!
We weten hoe je argumenten binnenkrijgt – hoe krijg je ze eruit?
return in Bash is alleen om aan te geven of de functie slaagt (0) of faalt (andere waarden 1–255). Dit komt in de globale variabele $?
Onze opties:
echo op de laatste regel en opvangen met een subshellKijk naar een return-fout:
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
Wat gebeurde er?
$? was 127 (fout)Laten we correct een waarde teruggeven met echo en een subshell-capture:
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
Introductie tot Bash-scripting