Argumenten, returnwaarden en scope

Introductie tot Bash-scripting

Alex Scriven

Data Scientist

Argumenten doorgeven aan Bash-functies

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:

  • Elk argument via $1, $2, enz.
  • $@ en $* geven alle argumenten in ARGV
  • $# geeft het aantal argumenten
Introductie tot Bash-scripting

Voorbeeld: argumenten doorgeven

We 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
Introductie tot Bash-scripting

Scope in programmeren

 

‘Scope’ in programmeren is hoe toegankelijk een variabele is.

  • ‘Globaal’ betekent overal toegankelijk, ook in FOR-loops, IF-statements, functies, etc.
  • ‘Lokaal’ betekent alleen toegankelijk binnen een deel van het programma.

Waarom is dit belangrijk? Als je iets met alleen lokale scope probeert te gebruiken, kan je programma falen met een fout!

Introductie tot Bash-scripting

Scope in Bash-functies

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.

Introductie tot Bash-scripting

Scope beperken in Bash-functies

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!

Introductie tot Bash-scripting

Returnwaarden

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:

  1. Toewijzen aan een globale variabele
  2. echo op de laatste regel en opvangen met een subshell
Introductie tot Bash-scripting

Een return-fout

Kijk 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?

  1. Er trad een fout op bij het aanroepen van de functie
    • Het script zocht naar 'echlo' als programma, maar dat bestond niet
  2. De returnwaarde in $? was 127 (fout)
Introductie tot Bash-scripting

Correct teruggeven

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
  • Zie je dat we geen tussenvariabele meer maken?
Introductie tot Bash-scripting

Laten we oefenen!

Introductie tot Bash-scripting

Preparing Video For Download...