280 likes | 471 Views
Il sistema operativo UNIX Shell: uso avanzato e script. Niccol ò Battezzati <niccolo.battezzati@polito.it> Politecnico di Torino Dip. Automatica e Informatica. 1. Sistemi Operativi - Introduzione. Programma. Linux: introduzione e comandi principali Shell: l’interprete dei comandi
E N D
Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati<niccolo.battezzati@polito.it> Politecnico di Torino Dip. Automatica e Informatica 1 Sistemi Operativi - Introduzione
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 2 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 4 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 5 Sistemi Operativi - Introduzione
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 6 Sistemi Operativi - Introduzione
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 7 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 8 Sistemi Operativi - Introduzione
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 ... 9 Sistemi Operativi - Introduzione
Funzioni - esempio function printUsage { echo “Wrong number of parameters ($1)” echo “Usage: $0 param1 param2” exit 0 } ... if test $# -ne 2 then printUsage $# fi 10 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 11 Sistemi Operativi - Introduzione
Costrutto if-then-fi • Sintassi: • if condition • then • commands • [elif condition • then • commands] • [else • commands] • fi • Condizioni: • iftest param op param • oppure • if [ param op param ] SERVONO gli SPAZI!!! 12 Sistemi Operativi - Introduzione
Flag di confronto • Confronto tra numeri: • -eq vero sei due numeri sono uguali • -ne vero sei due numeri non sono uguali • -gt vero seil primo numero e` maggiore • -ge vero seil primo numero e` maggiore o uguale • -lt vero seil primo numero e` minore • -le vero seil primo numero e` minore o uguale • Confronto tra stringhe: • = vero sele due stringhe sono uguali • != vero sele due stringhe non sono uguali 13 Sistemi Operativi - Introduzione
Flag di confronto • Confronto per file: • -f vero sel’argomentoe` un file normale • -d vero sel’argomentoe` una directory • -r vero sel’argomentoha il permesso di lettura • -wvero sel’argomentoha il permesso di scrittura • -xvero sel’argomentoha il permesso di esecuzione • Operatori logici: • ! NOT • -a AND • -o OR 14 Sistemi Operativi - Introduzione
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 15 Sistemi Operativi - Introduzione
Costrutto case-esac • Sintassi: • case var in • str1) • commands ;; • str2|str3) • commands ;; • ... • *) • commands ;; • esac 16 Sistemi Operativi - Introduzione
Costrutto case - esempi • case $1 in • 01 | 1) echo “Gennaio” ;; • 02 | 2) echo “Febbraio” ;; • ... • 12) echo “Dicembre” ;; • *) echo “Error: unknown month”;; • esac 17 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 18 Sistemi Operativi - Introduzione
Costrutto for-do-done • Sintassi: • 1: • for (( expr1 ; expr2 ; expr3 )) • do • commands • done • 2: • for var in list... • do • commands • done 19 Sistemi Operativi - Introduzione
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 20 Sistemi Operativi - Introduzione
Costrutto while-do-done • Sintassi: • while condition • do • commands • done 21 Sistemi Operativi - Introduzione
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 22 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 23 Sistemi Operativi - Introduzione
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. 24 Sistemi Operativi - Introduzione
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” 25 Sistemi Operativi - Introduzione
Indice • Variabili • Funzioni • Costrutti di confronto (if e case) • Loop (for e while) • Read • Segnali 26 Sistemi Operativi - Introduzione
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.). 27 Sistemi Operativi - Introduzione
Segnali • Per specificareilcomportamentodaadottaresiusailcomando: trap [‘commands’] [signal...] • trap ‘commands’ signals... eseguecommandsallaricezionedisignals • trap ‘’ signals... ignoratuttiisegnalisignals • trap signals... ripristinailcomportamentodi default per isegnalisignals. 28 Sistemi Operativi - Introduzione
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 29 Sistemi Operativi - Introduzione