Introducere în Bash Scripting
Alex Scriven
Data Scientist
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:
$1, $2 etc.$@ și $* returnează toate argumentele din ARGV$# returnează numărul de argumenteSă 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
„Domeniul de vizibilitate" se referă la accesibilitatea unei variabile.
De ce contează? Dacă accesați o variabilă cu domeniu local din exterior, programul poate genera o eroare!
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.
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!
Ș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:
echo al valorii dorite (ultima linie din funcție) și capturare cu shell-în-shellSă 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?
$? a fost 127 (eroare)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
Introducere în Bash Scripting