B - Il Sistema Operativo
ES08 - Controllo remoto versione base
FB - 05.2026 - v1.6
“La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni… e nessuno sa il perché!”
Controllo Remoto
Esercitazione per il controllo remoto di dispositivi tramite script bash con la Raspberry PI
2
© FB - 10.2025
Indice
3
© FB - 10.2025
Obiettivi didattici
4
Obiettivi didattici
5
© FB - 10.2025
Introduzione teorica
6
Le funzioni
7
© FB - 02.2024
Le funzioni
Le funzioni in Bash sono blocchi di codice riutilizzabili che eseguono specifiche operazioni quando vengono chiamate. Le funzioni rendono più modulare e organizzato il codice Bash, consentendo di suddividere compiti complessi in sotto-task più gestibili. Ecco la sintassi di base per definire una funzione in uno script Bash:
nome_funzione() {
# Corpo della funzione
# Comandi da eseguire quando la funzione viene chiamata
}
Ecco un esempio semplice di definizione e chiamata di una funzione:
#!/bin/bash
# Definizione di una funzione
saluta() {
echo "Ciao, benvenuto!"
}
# Chiamata della funzione
saluta
8
© FB - 02.2024
Le funzioni
In Bash, le funzioni possono accettare argomenti, proprio come gli script Bash possono accettare argomenti da riga di comando. Gli argomenti passati a una funzione in Bash sono chiamati "parametri della funzione". Questi parametri vengono passati alla funzione nello stesso modo degli argomenti passati agli script Bash.
Puoi accedere agli argomenti all'interno della funzione utilizzando le variabili speciali $1, $2, $3, ecc., che corrispondono ai primi, secondi, terzi argomenti, e così via. Ecco un esempio di funzione che accetta argomenti:
#!/bin/bash
# Definizione di una funzione che accetta argomenti
saluta_persona() {
echo "Ciao, $1! Benvenuto in Bash."
}
# Chiamata della funzione con un argomento
saluta_persona "Giovanni"
In questo esempio, la funzione saluta_persona prende un argomento (il nome della persona da salutare) e lo utilizza all'interno del messaggio di saluto.
Le funzioni possono essere posizionate ovunque nello script e possono essere chiamate da qualsiasi parte dello script dopo essere state definite. Le funzioni possono anche restituire valori utilizzando return.
9
© FB - 02.2024
Le funzioni
Lettura di variabili esterne: Le funzioni possono leggere le variabili definite al di fuori di esse senza doverle passare come argomenti. Le variabili globali sono accessibili all'interno delle funzioni.
mia_variabile="valore esterno"
function mia_funzione {
echo "Valore esterno: $mia_variabile"
}
mia_funzione
Scrittura di variabili esterne: Le funzioni possono scrivere direttamente su variabili globali.
mia_variabile="valore esterno"
function mia_funzione {
mia_variabile="nuovo valore"
}
echo "Prima della chiamata: $mia_variabile"
mia_funzione
echo "Dopo la chiamata: $mia_variabile"
10
© FB - 02.2024
Le funzioni
Utilizzo di variabili locali: la parola chiave local viene utilizzata per dichiarare variabili locali all'interno di una funzione. Le variabili definite come locali sono accessibili solo all'interno della funzione stessa e non vengono propagate al di fuori della funzione. Questo è particolarmente utile per evitare che le variabili definite all'interno di una funzione entrino in conflitto con variabili globali o con lo stesso nome definite in altre funzioni.
mia_variabile="valore esterno"
function mia_funzione {
local mia_variabile="valore interno"
echo "Dentro la funzione: $mia_variabile"
}
mia_funzione
echo "Fuori dalla funzione: $mia_variabile"
funzione_test() {
# Definizione di variabile locale
local variabile_locale="Valore locale"
# Stampare il valore della variabile locale
echo "Variabile locale all'interno della funzione: $variabile_locale"
}
# Chiamata alla funzione
funzione_test
# Tentativo di accedere alla variabile locale al di fuori della funzione
echo "Variabile locale al di fuori della funzione: $variabile_locale"
11
© FB - 02.2024
Restituzione di valori con le funzioni
In Bash, le funzioni possono restituire valori attraverso il meccanismo dell'exit status e attraverso la stampa dei valori nell'output standard. Tuttavia, Bash non supporta il concetto di un valore di ritorno di una funzione come altri linguaggi di programmazione. Di seguito sono descritti i metodi comuni per restituire valori dalle funzioni Bash:
Exit Status:
Le funzioni in Bash restituiscono un exit status che indica se la funzione è stata eseguita con successo o se è fallita. Un exit status di 0 indica successo, mentre un valore diverso da 0 indica un fallimento. Puoi impostare manualmente l'exit status utilizzando il comando return all'interno della funzione. Ad esempio:
function mia_funzione {
# Fai qualcosa
return 5
}
mia_funzione
echo $? #stampa 5
Output Standard:
Le funzioni in Bash possono stampare valori nell'output standard utilizzando echo, printf o altri comandi di stampa. Questi valori possono essere catturati e assegnati a variabili al di fuori della funzione utilizzando la sostituzione di comando. Ad esempio:
function mia_funzione {
echo "Valore restituito"
}
# Chiamata alla funzione e cattura dell'output
risultato=$(mia_funzione)
echo $risultato #stamperà Valore restituito
12
© FB - 02.2024
wget
13
© FB - 02.2024
wget
Il comando wget è un'utilità di linea di comando che consente di scaricare file da Internet utilizzando il protocollo HTTP, HTTPS e FTP. È ampiamente utilizzato su sistemi Unix-like, inclusi Linux e macOS. Ecco una sintassi di base per utilizzare il comando wget:
wget [opzioni] [URL]
Dove [opzioni] sono le opzioni che è possibile specificare per personalizzare il comportamento di wget, e [URL] è l'indirizzo URL del file che si desidera scaricare. Alcune delle opzioni comuni includono:
14
© FB - 02.2024
wget
Esempio di utilizzo wget per controllare la connessione ad Internet
# il comando wget --spider restituisce 0 se il collegamento è attivo
# l'opzione -q serve per non stampare a video il risultato
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Collegamento a Internet attivo"
fi
Ecco un esempio di come usare wget per scaricare un file e assegnargli un nome:
RMT_FILE_ACCENDI="https://raw.githubusercontent.com/filippo-bilardo/TPSIT_1/main/ES04/accendi"
LCL_FILE_ACCENDI="accendi"
wget $RMT_FILE_ACCENDI -O $LCL_FILE_ACCENDI
15
© FB - 02.2024
sleep
16
© FB - 02.2024
sleep
Il comando sleep è un'utilità di linea di comando utilizzata per mettere in pausa l'esecuzione di uno script o di un programma per un determinato periodo di tempo. È utile quando si desidera aggiungere un ritardo o una pausa tra le istruzioni all'interno di uno script Bash o di un'altra shell.
La sintassi di base del comando sleep è la seguente:
sleep <durata>
Dove <durata> rappresenta il periodo di tempo per cui si desidera mettere in pausa l'esecuzione dello script, espressa in secondi per impostazione predefinita.
Ecco alcuni esempi di come utilizzare il comando sleep:
sleep 5 //Mette in pausa l'esecuzione per 5 secondi
sleep 60 //Mette in pausa l'esecuzione per 1 minuto (60 secondi)
17
© FB - 02.2024
Approfondimenti
18
© FB - 02.2024
Approfondimenti
19
© FB - 05.2026
Esercitazione
20
Esercizio a�Controllo remoto semplice
21
© FB - 10.2025
Controllo remoto semplice
Scrivere uno script che controlli la presenza del file “accendi” o del file “spegni” su di un server remoto (GitHub, Dropbox,...). In base al file presente eseguire il comando remoto corrispondente, che può essere simulato con l’accensione o lo spegnimento di una lampada collegata alla Raspberry PI oppure stampando a schermo l’operazione che si intende eseguire.
22
© FB - 02.2022
Procedura
23
© FB - 02.2024
Esercizio b
24
© FB - 10.2025
Loop infinito
Modificare il precedente script in modo che il nostro sistema embedded (Linux), rimanga sempre in esecuzione controllando ed eseguendo periodicamente (ogni 30 sec) i comandi prelevati dal server remoto.
25
© FB - 10.2025
Esercizio c
26
© FB - 10.2025
Loop infinito
Organizzare il precedente programma utilizzando le funzioni da richiamare poi nel main:
27
© FB - 10.2025
Esercizio d
Prima di completare il programma completo, scrivere e testare (singolarmente) le seguenti funzioni:
28
© FB - 03.2024
Esercizio d
29
© FB - 03.2024
Valutazione
30
Griglia di valutazione
Si ricorda l’importanza di svolgere e consegnare i progetti assegnati.
31
© FB - 10.2025
Grazie per l’attenzione
Link/Riferimenti
33
© FB - 10.2025
Revisioni
v1.0 09/01/20 - Versione iniziale�v1.1 06/02/20 - Esecuzione di comandi multipli�v1.2 06/05/20 - Le funzioni, maggiore dettaglio dell’esercitazione�v1.3 16/02/22 - tolta la parte sul gpio spiegata nella precedente esercitazione�v1.4 08/01/24 - Ampliata l’introduzione teorica�v1.5 18/5/26 - Aggiunti approfondimenti e rivisti gli esercizi
34