Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati <[email protected]> Politecnico di Torino Dip. Automatica e Informatica Sistemi Operativi - Introduzione 1 Indice • Variabili • Funzioni • Read • Segnali Sistemi Operativi - Introduzione 2 Indice • Variabili • Funzioni • Read • Segnali Sistemi Operativi - Introduzione 3 Variabili • Variabili predefinite: • $0 nome script • $1,$2,...parametri • $# numero parametri • $* stringa con tutti i parametri • $? valore di ritorno dell’ultmo programma • $$ PID del processo • $?var ‘1’ se var e` stata definita • $#var il numero di elementi nell’array var Sistemi Operativi - Introduzione 4 Variabili - array • Sono gestite variabili vettoriali unidimensionali: Esempi: • var=(1 2 5 ”ciao”) • echo ${var[0]} • echo ${var[1-3]} • Utili nelle funzioni: • BASH_ARGV[] e BASH_ARGC Sistemi Operativi - Introduzione 5 Indice • Variabili • Funzioni • Read • Segnali Sistemi Operativi - Introduzione 6 Funzioni • Si possono definire delle funzioni, prima che vengano chiamate, con la seguente sintassi: [function] name () {commands} • Il valore di ritorno e` definito: • o dal valore dell’ultimo comando eseguito • o dal comando return • I parametri sono definiti con la notazione posizionale: • $1, $2, $3 ... • Le funzioni vengono chiamate con la seguente sintassi: • name param1 param2 ... Sistemi Operativi - Introduzione 7 Funzioni - esempio function printUsage { echo “Wrong number of parameters ($1)” echo “Usage: ${BASH_ARGV[0]} param1 param2” exit 0 } ... if test $# -ne 2 then printUsage $# fi Sistemi Operativi - Introduzione 8 Indice • Variabili • Funzioni • Read • Segnali Sistemi Operativi - Introduzione 9 Read • read permette di leggere una riga da stdin, con la seguente sintassi: read var1 var2 ... varN • ogni parola (separata da spazi) viene messa in una variabile • l’ultima variabile contiene tutte le rimanenti parole • permette di fare input interattivo. Sistemi Operativi - Introduzione 10 read - esempi (per scambiare due colonne in un file): while read var1 var2 do echo $var2 $var1; done <file_in >file_out (input interattivo): echo –n “Insert a sentence: ” read w1 w2 others echo “Word 1 is: $w1” echo “Word 2 is: $w2” echo “The rest of the line is: $others” Sistemi Operativi - Introduzione 11 Indice • Variabili • Funzioni • Read • Segnali Sistemi Operativi - Introduzione 12 Segnali • I processi possono ricevere dei segnali, o dall’utente o da altri processi. Il processo puo` quindi decidere di: • ignorare il segnale • eseguire il comportamento di default • gestire il segnale • Per mandare un segnale si usa il comando kill –signal pid dove signal puo` essere un numero o un nome (come KILL o USR1 ecc.). Sistemi Operativi - Introduzione 13 Segnali • Per specificare il comportamento da adottare si usa il comando: trap [‘commands’] [signal...] 1. trap ‘commands’ signals... esegue commands alla ricezione di signals 2. trap ‘’ signals... ignora tutti i segnali signals 3. trap signals... ripristina il comportamento di default per i segnali signals. Sistemi Operativi - Introduzione 14 Segnali - esempi (per gestire il segnale SIGALRM): trap ‘echo mi sono svegliato’ ALRM (per ripristinare il valore di default): trap ALRM (per ignorare SIGUSR1 e SIGUSR2): trap ‘’ USR1 USR2 Sistemi Operativi - Introduzione 15