sistemi operativi - introduzione

28
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati <[email protected]> Politecnico di Torino Dip. Automatica e Informatica

Upload: lavender

Post on 12-Feb-2016

78 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione1

Il sistema operativo UNIXShell: uso avanzato e script

Niccolò Battezzati <[email protected]>

Politecnico di TorinoDip. Automatica e Informatica

Page 2: Sistemi Operativi - Introduzione

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

Page 3: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione4

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 4: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione5

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 5: Sistemi Operativi - Introduzione

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

Page 6: Sistemi Operativi - Introduzione

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

Page 7: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione8

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 8: Sistemi Operativi - Introduzione

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 ...

Page 9: Sistemi Operativi - Introduzione

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

Page 10: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione11

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 11: Sistemi Operativi - Introduzione

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!!!

Page 12: Sistemi Operativi - Introduzione

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

Page 13: Sistemi Operativi - Introduzione

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

Page 14: Sistemi Operativi - Introduzione

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

Page 15: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione16

Costrutto case-esac• Sintassi:

case var in str1) commands ;;

str2|str3) commands ;;

...*)commands ;;

esac

Page 16: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione17

Costrutto case - esempicase $1 in

01 | 1) echo “Gennaio” ;;

02 | 2) echo “Febbraio” ;;

...

12) echo “Dicembre” ;;

*) echo “Error: unknown month”;;

esac

Page 17: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione18

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 18: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione19

Costrutto for-do-done• Sintassi:

• 1:for (( expr1 ; expr2 ; expr3 ))docommands

done• 2:

for var in list...docommands

done

Page 19: Sistemi Operativi - Introduzione

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

Page 20: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione21

Costrutto while-do-done• Sintassi:

while conditiondo

commandsdone

Page 21: Sistemi Operativi - Introduzione

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

Page 22: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione23

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 23: Sistemi Operativi - Introduzione

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.

Page 24: Sistemi Operativi - Introduzione

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”

Page 25: Sistemi Operativi - Introduzione

Sistemi Operativi - Introduzione26

Indice• Variabili

• Funzioni

• Costrutti di confronto (if e case)

• Loop (for e while)

• Read

• Segnali

Page 26: Sistemi Operativi - Introduzione

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.).

Page 27: Sistemi Operativi - Introduzione

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.

Page 28: Sistemi Operativi - Introduzione

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