Argomenti, valori di ritorno e scope

Introduzione al Bash Scripting

Alex Scriven

Data Scientist

Passare argomenti alle funzioni Bash

Passare argomenti alle funzioni è come passarli a uno script, con la notazione $1.

Hai anche accesso alle proprietà speciali di ARGV viste prima:

  • Ogni argomento è accessibile con $1, $2, ecc.
  • $@ e $* danno tutti gli argomenti in ARGV
  • $# dà il numero di argomenti
Introduzione al Bash Scripting

Esempio: passare argomenti

Passiamo alcuni nomi di file come argomenti a una funzione per fare una demo. Li iteriamo e li stampiamo.

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
Introduzione al Bash Scripting

Scope in programmazione

 

Lo 'scope' in programmazione indica quanto è accessibile una variabile.

  • 'Globale' significa accessibile ovunque nel programma, anche in FOR, IF, funzioni, ecc.
  • 'Locale' significa accessibile solo in una certa parte del programma.

Perché conta? Se accedi a qualcosa con scope locale fuori dal suo ambito, il programma può dare errore!

Introduzione al Bash Scripting

Scope nelle funzioni Bash

Diversamente dalla maggior parte dei linguaggi (es. Python e R), in Bash tutte le variabili sono globali di default.

function print_filename {
    first_filename=$1
}

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

Attenzione: lo scope globale è rischioso, è più facile causare effetti indesiderati.

Introduzione al Bash Scripting

Limitare lo scope nelle funzioni Bash

Puoi usare la keyword local per limitare lo scope delle variabili.

function print_filename {
    local first_filename=$1
}

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


 

D: Perché non c'è stato un errore, ma solo una riga vuota?

R: first_filename è stato assegnato al primo elemento globale di ARGV ($1).

Ho eseguito lo script senza argomenti (bash script.sh), quindi è vuoto per default. Occhio!

Introduzione al Bash Scripting

Valori di ritorno

Sappiamo come passare argomenti in input: come riportarli in output?

L'opzione return in Bash serve solo a indicare successo (0) o errore (altri valori 1-255). È salvata nella variabile globale $?

Le opzioni sono:

  1. Assegnare a una variabile globale
  2. Fare echo del valore (ultima riga della funzione) e catturarlo con subshell
Introduzione al Bash Scripting

Un errore di ritorno

Vediamo un errore di return:

function function_2 {
    echlo # Errore di 'echo'
}

function_2 # Chiama la funzione echo $? # Stampa il valore di ritorno
script.sh: line 2: echlo: command not found
127

Che è successo?

  1. C'è stato un errore chiamando la funzione
    • Lo script ha cercato il programma 'echlo' ma non esiste
  2. Il valore in $? è 127 (errore)
Introduzione al Bash Scripting

Restituire correttamente

Restituiamo correttamente un valore da usare altrove nello script con echo e cattura in subshell:

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
  • Vedi che non creiamo più la variabile intermedia?
Introduzione al Bash Scripting

Passons à la pratique !

Introduzione al Bash Scripting

Preparing Video For Download...