Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò...
-
Upload
berengar-gagliardi -
Category
Documents
-
view
217 -
download
0
Transcript of Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò...
Sistemi Operativi - Introduzione1
Il sistema operativo UNIXShell: uso avanzato e script
Niccolò Battezzati <[email protected]>
Politecnico di Torino
Dip. 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 2
then
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
then
commands
[elif condition
then
commands]
[else
commands]
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 - esempi
case $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 ))
do
commands
done
• 2:for var in list...
do
commands
done
Sistemi Operativi - Introduzione20
Costrutto for - esempi
for (( i=0 ; i<10 ; i++ ))
do
echo $i
done
for i in `ls | grep *.c`
do
chown pippo:disney $i
done
Sistemi Operativi - Introduzione21
Costrutto while-do-done• Sintassi:
while condition
do
commands
done
Sistemi Operativi - Introduzione22
Costrutto while - esempii=0
while [ $i –lt 10 ]
do
echo $i
i=$(($i+1))
done
(per scambiare due colonne in un file):
while read var1 var2
do
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 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 - 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