sistemi operativi - introduzione
DESCRIPTION
Il sistema operativo UNIX Shell: uso avanzato e script. Niccol ò Battezzati Politecnico di Torino Dip. Automatica e Informatica. 1. Sistemi Operativi - Introduzione. Programma. Linux: introduzione e comandi principali Shell: l’interprete dei comandi - PowerPoint PPT PresentationTRANSCRIPT
Sistemi Operativi - Introduzione1
Il sistema operativo UNIXShell: uso avanzato e script
Niccolò Battezzati <[email protected]>
Politecnico di TorinoDip. Automatica e Informatica
Sistemi Operativi - Introduzione2
Programma
• Linux: introduzione e comandi principali
• Shell: l’interprete dei comandi
• Linux: dettagli e comandi avanzati
• Shell: uso avanzato e script
• Il linguaggio di programmazione AWK
• vi(m): un editor di testo
Sistemi Operativi - Introduzione4
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione5
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione6
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 - Introduzione7
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 - Introduzione8
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione9
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 - Introduzione10
Funzioni - esempiofunction printUsage{
echo “Wrong number of parameters ($1)”echo “Usage: $0 param1 param2”exit 0
}
...if test $# -ne 2then
printUsage $#fi
Sistemi Operativi - Introduzione11
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione12
Costrutto if-then-fi• Sintassi:
if condition thencommands
[elif conditionthencommands]
[elsecommands]
fi
• Condizioni:
if test param op param
oppure
if [ param op param ]
SERVONO gli SPAZI!!!
Sistemi Operativi - Introduzione13
Flag di confronto• Confronto tra numeri:
• -eq vero se i due numeri sono uguali• -ne vero se i due numeri non sono uguali• -gt vero se il primo numero e` maggiore• -ge vero se il primo numero e` maggiore o uguale• -lt vero se il primo numero e` minore• -le vero se il primo numero e` minore o uguale
• Confronto tra stringhe:• = vero se le due stringhe sono uguali• != vero se le due stringhe non sono uguali
Sistemi Operativi - Introduzione14
Flag di confronto• Confronto per file:
• -f vero se l’argomento e` un file normale• -d vero se l’argomento e` una directory• -r vero se l’argomento ha il permesso di lettura• -w vero se l’argomento ha il permesso di scrittura• -x vero se l’argomento ha il permesso di esecuzione
• Operatori logici:• ! NOT• -a AND• -o OR
Sistemi Operativi - Introduzione15
Costrutto if - esempiif test $1 = “-r”then
recursive_search=1fi
if [ $recursive_search –eq 1 –a –d $2 ]then
find $2 –name *.c > $3elif [ $recursive_search –eq 0 –a –d $2 ]then
find $2 –maxdepth 1 *.c > $3else
printUsageAndExitfi
Sistemi Operativi - Introduzione16
Costrutto case-esac• Sintassi:
case var in str1) commands ;;
str2|str3) commands ;;
...*)commands ;;
esac
Sistemi Operativi - Introduzione17
Costrutto case - esempicase $1 in
01 | 1) echo “Gennaio” ;;
02 | 2) echo “Febbraio” ;;
...
12) echo “Dicembre” ;;
*) echo “Error: unknown month”;;
esac
Sistemi Operativi - Introduzione18
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione19
Costrutto for-do-done• Sintassi:
• 1:for (( expr1 ; expr2 ; expr3 ))docommands
done• 2:
for var in list...docommands
done
Sistemi Operativi - Introduzione20
Costrutto for - esempifor (( i=0 ; i<10 ; i++ ))doecho $i
done
for i in `ls | grep *.c`dochown pippo:disney $i
done
Sistemi Operativi - Introduzione21
Costrutto while-do-done• Sintassi:
while conditiondo
commandsdone
Sistemi Operativi - Introduzione22
Costrutto while - esempii=0while [ $i –lt 10 ]do
echo $ii=$(($i+1))
done
(per scambiare due colonne in un file):while read var1 var2do
echo $var2 $var1;done <file_in >file_out
Sistemi Operativi - Introduzione23
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione24
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 - Introduzione25
read - esempi(per scambiare due colonne in un file):while read var1 var2do
echo $var2 $var1;done <file_in >file_out
(input interattivo):echo –n “Insert a sentence: ”read w1 w2 othersecho “Word 1 is: $w1”echo “Word 2 is: $w2”echo “The rest of the line is: $others”
Sistemi Operativi - Introduzione26
Indice• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione27
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 piddove signal puo` essere un numero o un nome (come KILL o USR1 ecc.).
Sistemi Operativi - Introduzione28
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 - Introduzione29
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