Il sistema operativo UNIX
Shell: uso avanzato e script
Niccolò Battezzati
<[email protected]>
Politecnico di Torino
Dip. Automatica e Informatica
Sistemi Operativi - Introduzione
1
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 - Introduzione
2
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
4
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
5
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
6
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
7
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
8
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
9
Funzioni - esempio
function printUsage
{
echo “Wrong number of parameters ($1)”
echo “Usage: $0 param1 param2”
exit 0
}
...
if test $# -ne 2
then
printUsage $#
fi
Sistemi Operativi - Introduzione
10
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
11
Costrutto if-then-fi
• Sintassi:
if condition
then
commands
[elif condition
then
commands]
[else
commands]
fi
Sistemi Operativi - Introduzione
• Condizioni:
if test param op param
oppure
if [ param op param ]
SERVONO gli SPAZI!!!
12
Flag di confronto
• Confronto tra numeri:
•
•
•
•
•
•
-eq
-ne
-gt
-ge
-lt
-le
vero se i due numeri sono uguali
vero se i due numeri non sono uguali
vero se il primo numero e` maggiore
vero se il primo numero e` maggiore o uguale
vero se il primo numero e` minore
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 - Introduzione
13
Flag di confronto
• Confronto per file:
•
•
•
•
•
-f
-d
-r
-w
-x
vero se l’argomento e` un file normale
vero se l’argomento e` una directory
vero se l’argomento ha il permesso di lettura
vero se l’argomento ha il permesso di scrittura
vero se l’argomento ha il permesso di esecuzione
• Operatori logici:
• !
• -a
• -o
NOT
AND
OR
Sistemi Operativi - Introduzione
14
Costrutto if - esempi
if test $1 = “-r”
then
recursive_search=1
fi
if [ $recursive_search –eq 1 –a –d $2 ]
then
find $2 –name *.c > $3
elif [ $recursive_search –eq 0 –a –d $2 ]
then
find $2 –maxdepth 1 *.c > $3
else
printUsageAndExit
fi
Sistemi Operativi - Introduzione
15
Costrutto case-esac
• Sintassi:
case var in
str1)
commands ;;
str2|str3)
commands ;;
...
*)
commands ;;
esac
Sistemi Operativi - Introduzione
16
Costrutto case - esempi
case $1 in
01 | 1) echo “Gennaio” ;;
02 | 2) echo “Febbraio” ;;
...
12) echo “Dicembre” ;;
*) echo “Error: unknown month”;;
esac
Sistemi Operativi - Introduzione
17
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
18
Costrutto for-do-done
• Sintassi:
• 1:
for (( expr1 ; expr2 ; expr3 ))
do
commands
done
• 2:
for var in list...
do
commands
done
Sistemi Operativi - Introduzione
19
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 - Introduzione
20
Costrutto while-do-done
• Sintassi:
while condition
do
commands
done
Sistemi Operativi - Introduzione
21
Costrutto while - esempi
i=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 - Introduzione
22
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
23
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
24
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
25
Indice
• Variabili
• Funzioni
• Costrutti di confronto (if e case)
• Loop (for e while)
• Read
• Segnali
Sistemi Operativi - Introduzione
26
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
27
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
28
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
29
Scarica

so_0910_4