Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Bash scripting, Appunti di Sistemi Operativi

slide di sistemi operativi sul bash scripting

Tipologia: Appunti

2011/2012

Caricato il 05/02/2012

corsibu
corsibu 🇮🇹

4.5

(255)

14 documenti

1 / 21

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Sistemi operativi
G. Di Natale, S. Di Carlo, B. Montrucchio- v. 3 1
Sistemi Operativi - Script di Shell 1
Il sistema operativo LINUX
Script di Shell
Giorgio Di Natale <[email protected]>
Stefano Di Carlo <[email protected]>
Bartolomeo Montrucchio <[email protected]>
Politecnico di Torino
Dip. Automatica e Informatica
Sistemi Operativi - Script di Shell 2
File di comandi (script)
E’ possibile memorizzare in un file una serie di
comandi, eseguibili richiamando il file stesso:
Esecuzione indiretta:
source <scriptname> <args>
Nota: in tal caso non serve il permesso di esecuzione
Esecuzione diretta eseguendo lo script
E’ necessario che lo script abbia il permesso di
esecuzione
La prima riga del file inizia con #! seguita dal
nome (con il path assoluto) della shell con cui si
vogliono (funziona anche senza) eseguire i comandi
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Anteprima parziale del testo

Scarica Bash scripting e più Appunti in PDF di Sistemi Operativi solo su Docsity!

Sistemi Operativi - Script di Shell 1

Il sistema operativo LINUX

Script di Shell

Giorgio Di Natale

Stefano Di Carlo < [email protected]>

Bartolomeo Montrucchio

Politecnico di Torino

Dip. Automatica e Informatica

File di comandi (script)

ï Eí possibile memorizzare in un file una serie di

comandi, eseguibili richiamando il file stesso:

ñ Esecuzione indiretta:

source

Nota: in tal caso non serve il permesso di esecuzione

ñ Esecuzione diretta eseguendo lo script

ï Eí necessario che lo script abbia il permesso di

esecuzione

ï La prima riga del file inizia con #! seguita dal

nome (con il path assoluto) della shell con cui si

vogliono (funziona anche senza) eseguire i comandi

Sistemi Operativi - Script di Shell 3

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Sistemi Operativi - Script di Shell 7

Variabili vettoriali

ï Sono previste variabili vettori:

ñ definizione enumerando i valori tra parentesi

tonde

ñ accesso con la notazione del C (ossia

parentesi quadre); Ë possibile

specificare degli intervalli

Variabili vettoriali - Esempio

set v = (a b c)

echo $?v 1

echo $#v 3

echo $v[2] b

echo $v[1-2] a b

unset v

echo $#v Undefined variable: v

Sistemi Operativi - Script di Shell 9

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Caratteri particolari (ì)

ï ëíî identifica una stringa. Allíinterno

vengono espanse le variabili

ñ myVar = ìCiaoî

ñ echo ìContenuto di myVar: $myVarî

Contenuto di myVar: Ciao

Sistemi Operativi - Script di Shell 13

Caratteri particolari (`)

ï ... identifica la sostituzione di

comando ATTENZIONE: accento grave (es. Ë)

ñ myVar = echo $LOGIN_NAME

ñ echo ìContenuto di myVar: $myVarî

Contenuto di myVar: dinatale

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Sistemi Operativi - Script di Shell 15

Condizioni

ï TCSH ( cond )

$ cat test #!/bin/tcsh

Esempio di confronto (if) -> tcsh

set str1 = "abc" set str2 = "abd" echo "str1 = $str1; str2 = $str2" if ($str1 == $str2) then echo "str1 uguale a str2" else echo "str1 diversa da str2" endif $ ./test str1 = abc; str2 = abd str1 diversa da str

ï BASH test expr oppure [ expr ]

$ cat test #!/bin/bash

Esempio di confronto (if) -> bash

str1="abcì (NO spazi) str2="abd" echo "str1 = $str1; str2 = $str2" if test $str1 = $str (oppure if [ $str1 = $str2 ] (SPAZI [ ])) then echo "str1 uguale a str2" else echo "str1 diversa da str2" fi $ ./test str1 = abc; str2 = abd str1 diversa da str

Confronto tra stringhe

ï TCSH ñ == uguale ñ != diverso

ï BASH ñ = uguale ñ != diverso ñ -n lunghezza > di 0 ñ -z lunghezza = 0

Sistemi Operativi - Script di Shell 19

Operatori logici

ï TCSH ñ! NOT ñ && AND ñ || OR

ï BASH ñ! NOT ñ -a AND ñ -o OR

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Sistemi Operativi - Script di Shell 21

Líistruzione if

ï TCSH ñ if (espressione) then istruzioni else if (espressione) then istruzioni else istruzioni endif

ï BASH ñ if [ espressione ] then istruzioni elif [ espressione ] then istruzioni else istruzioni fi

Líistruzione for

ï TCSH ñ foreach myVar (elenco) istruzioni end

ï BASH ñ for myVar in elenco do istruzioni done

Sistemi Operativi - Script di Shell 25

Líistruzione while - Esempio

ï TCSH ñ set ind = 0 while ($ind <= 15) touch ìxxx$indî set ind = expr $ind + 1 end

ï BASH ñ ind=0; while [ $ind -le 15 ] do touch "xxx$ind" ind=expr $ind + 1 done ATTENZIONE agli spazi vicino allí= e vicino alle [ ], nonchÈ alle posizioni delle $

Líistruzione case

ï TCSH ñ switch (str) case str1 | str2: istruzioni breaksw default: istruzioni breaksw endsw

ï BASH ñ case str in str1) istruzioni ;; str2 | str3) istruzioni ;; *) istruzioni ;; esac

Sistemi Operativi - Script di Shell 27

Líistruzione case - Esempio

ï TCSH ñ switch ($1) case 01 | 1: echo ìGennaioî breaksw ... default: echo ìNon validoî breaksw endsw

ï BASH ñ case $1 in 01 | 1) echo ìGennaioî;; 02 | 2) echo ìFebbraioî;; ...

  1. echo ìDicembreî;; *) echo ìNon validoî;; esac

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Sistemi Operativi - Script di Shell 31

Tr, Wc, Uniq, Pr

ï tr permette di trasfomare un file agendo sui caratteri contenuti; ad es. tr a-z A-Z < a > b salva in b il file a dopo aver trasformato i caratteri minuscoli in maiuscoli ï wc (word count): conta il numero di byte (wc ñc nomefile), di linee (wc ñl), di parole (wc ñw) ï uniq da utilizzare in pipe ad es. con sort per eliminare i duplicati es: Ö.| sort | uniq ï pr stampa i file di testo con un minimo di formattazione; in particolare pr ñn stampa aggiungendo i numeri di linea (utilissimo per stampare il codice)

Operazioni aritmetiche

ï In bash $[expr] num1= num2=$[$num13+1] (* NO spazi vicino allí=) Altrimenti usare il comando expr ï In tcsh usare le espressioni come mostrato set num1 = 5 @ num2 = $num1 * 3 + 1 (@ puÚ sostituire set, ma non vale il contrario) echo $num1 $num stampa -> 5 16

Sistemi Operativi - Script di Shell 33

Redirezione I/O con bash

ï > stdout su file

ï 2> stderr su file

ï &> stdout+stderr su file

ï >> stdout appeso a file

ï < stdin da file

Modificatori di variabili per tcsh

ï :r

il nome di un file senza estensione

ï :e

l'estensione di un file

ï :h

la "testa" di un nome di file (il path)

ï :t

la "coda" di un nome di file (no path)

Sistemi Operativi - Script di Shell 37

Indice

ï Variabili

ï Caratteri particolari

ï Condizioni

ï if, for, while, case

ï Istruzioni particolari

ï Segnali

Segnali

ï I programmi possono ricevere dei segnali

ñ Es: quando si preme CTRL-C il programma

viene interrotto. In realt‡, quando il sistema

operativo riceve dalla tastiera líinformazione

della pressione di CTRL-C, invia un segnale al

processo

ï Per inviare un segnale, si usa il comando kill

ñ kill -sig pid

Sistemi Operativi - Script di Shell 39

Segnali possibili

ï Signal Value Notes

interrupt 2 generato quando si preme CTRL-C

kill 9 terminazione forzata del processo

alarm 14 generato alla fine della system call

alarm()

Comportamento dei processi

ï Quando un processo riceve un segnale, puÚ:

ñ ignorare il segnale (tranne che per il segnale

kill)

ñ accettare líazione di default del segnale

(comportamento di default)

ñ eseguire del codice particolare per gestire

quel segnale