Argumente, valori returnate și domeniu de vizibilitate

Introducere în Bash Scripting

Alex Scriven

Data Scientist

Transmiterea argumentelor în funcțiile Bash

Transmiterea argumentelor în funcții este similară cu transmiterea lor într-un script, folosind notația $1.

Aveți acces și la proprietățile speciale ARGV prezentate anterior:

  • Fiecare argument este accesibil prin notațiile $1, $2 etc.
  • $@ și $* returnează toate argumentele din ARGV
  • $# returnează numărul de argumente
Introducere în Bash Scripting

Exemplu de transmitere a argumentelor

Să transmitem nume de fișiere ca argumente într-o funcție. Vom itera prin ele și le vom afișa.

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
Introducere în Bash Scripting

Domeniul de vizibilitate în programare

 

„Domeniul de vizibilitate" se referă la accesibilitatea unei variabile.

  • „Global" înseamnă că variabila este accesibilă oriunde în program, inclusiv în bucle FOR, instrucțiuni IF, funcții etc.
  • „Local" înseamnă că variabila este accesibilă doar într-o anumită parte a programului.

De ce contează? Dacă accesați o variabilă cu domeniu local din exterior, programul poate genera o eroare!

Introducere în Bash Scripting

Domeniul de vizibilitate în funcțiile Bash

Spre deosebire de alte limbaje (ex. Python și R), în Bash toate variabilele sunt globale implicit.

function print_filename {
    first_filename=$1
}

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

Atenție: domeniul global poate fi riscant, deoarece crește probabilitatea unor efecte neintenționate.

Introducere în Bash Scripting

Restricționarea domeniului în funcțiile Bash

Folosiți cuvântul cheie local pentru a restricționa domeniul variabilei.

function print_filename {
    local first_filename=$1
}

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


 

Întrebare: De ce nu a apărut o eroare, ci doar o linie goală?

Răspuns: first_filename a fost atribuit primului element global din ARGV ($1).

Scriptul a fost rulat fără argumente (bash script.sh), deci valoarea implicită este un element gol. Atenție!

Introducere în Bash Scripting

Valori returnate

Știm cum să transmitem argumente — dar cum le returnăm?

Opțiunea return în Bash indică doar dacă funcția a reușit (0) sau a eșuat (valori 1-255). Este capturată în variabila globală $?.

Opțiunile disponibile sunt:

  1. Atribuire la o variabilă globală
  2. echo al valorii dorite (ultima linie din funcție) și capturare cu shell-în-shell
Introducere în Bash Scripting

O eroare de returnare

Să vedem o eroare de returnare:

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

Ce s-a întâmplat?

  1. A apărut o eroare la apelarea funcției
    • Scriptul a căutat 'echlo' ca program, dar nu a fost găsit
  2. Valoarea returnată în $? a fost 127 (eroare)
Introducere în Bash Scripting

Returnare corectă

Să returnăm corect o valoare folosind echo și capturare shell-în-shell:

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
  • Observați că nu mai creăm variabila intermediară.
Introducere în Bash Scripting

Să exersăm!

Introducere în Bash Scripting

Preparing Video For Download...