La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sistemi Operativi – La shell Salvatore Campagna Politecnico di Torino Dipartimento di Automatica.

Presentazioni simili


Presentazione sul tema: "Sistemi Operativi – La shell Salvatore Campagna Politecnico di Torino Dipartimento di Automatica."— Transcript della presentazione:

1 Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica e Informatica

2 La shell - Instroduzione Lo strato più esterno del Sistema Operativo In UNIX/Linux la shell non è parte del sistema operativo ma è un normale processo utente Utilizzata per impartire comandi

3 La shell - Introduzione In UNIX esistono diverse shell Bourne Shell (sh) C-shell (csh) Korn shell (ksh) Tahoe C-shell (tcsh) Bourne Again Shell (bash)

4 La shell - Instroduzione Allavvio della shell vengono eseguiti i comandi contenuti in due file: 1. /etc/profile: per i comandi globali 2. ~/.profile: comandi per il singolo utente Alcune eseguono anche i comani contenuti nel file.logout quando terminano

5 Avvio shell Bash Per la shell Bash i file sono: Shell di login: /etc/profile e poi dalla propria home.bash_profile,.bash_login,.profile (di questi ultimi tre verrà letto solo il primo file esistente) Shell di login:.bash_logout, questo file viene letto all'uscita dalla shell Interattiva:.bashrc

6 Caratteristiche della shell Parametri Completamento automatico Pipe (o Pipeline) Redirezione dellI/O History Aliasing Espansione dei comandi

7 La shell – I parametri Simili a variabili di un linguaggio di programmazione Memorizzano uno o più valori Non hanno un tipo Possono avere un nome ($n, $nome, $address,…) Posizionali ($1, $2, …) se si riferiscono a parametri passati a un programma sulla riga di comando

8 La shell – Parametri speciali $0: nome del comando in esecuzione $#: numero di parametri posizionali sulla riga di comando $?: exit stats dellultimo comando $$: process ID della shell corrente $!: process ID dellultimo comando eseguito in background $-: opzioni passate alla shell corrente $*: una stringa contenente tutti i parametri posizionali ($1, $2, …) $@: come $*

9 La shell – Le variabili Assegnazione: nome=Alice, max=10 ATTENZIONE: non inserire spazi tra = e export nome: rende la variabile nome visibile ad altri processi unset nome: cancella la variabile e il suo valore

10 La shell – Le variabili Variabili built-in: PATH: variabile che indica le directory in cui cercare i comandi HOME: variabile che punta alla home directory dellutente BASH_ARGV, BASH_ARGC: parametri e numero di parametri passati alla shell Vettori vett[1]=uno, vett[2]=due v=(uno due tre quattro)

11 La shell – visualizzazione di variabili Si deve precedere il nome della variabile con il simbolo $ Esempi: echo $nome visualizza il contenuto della variabile nome echo ${vett[2]} visualizza il contenuto dellelemento con indice 2 del vettore vett

12 La shell – Completamento automatico Il tasto TAB permette di espandere e completare nomi di file, variabili e comandi: Se la riga comincia con $ la shell cerca di completare con un nome di variabile Altrimenti cerca di completare la riga con un comando In fine cerca di completare con il nome di un file ordinario della directory corrente

13 La shell - Pipe Concatenazione di più comandi in modo tale che lo stdout di un processo diventi lo stdin di un altro processo proc1 stdin(0)stdout(1) stderr(2) proc2 stdin stdout stderr

14 La shell - Pipe Sintassi: comando1 | comando2 Loutput di comandi1 diventa linput di comando2 Esempi: ls –la | more cat /etc/passwd | sed s/bash/csh/g cat /etc/passwd | grep alice

15 La shell – Redirezione dell I/O Epossibile redirigere stdout, stdin e stderr di un processo su file comando < file: redirige lo stdin di comando in modo che linput sia letto da file comando > file: redirige lo stdout di comando in modo che scriva su file Esempio: cat /etc/passwd | grep alice > alice_data.txt

16 La shell – Redirezione dellI/O comando >> file: redirige lo stdout di comando in modo che venga scritto su file in modalità append (non cancella i dati presenti) comando << file: redirige lo stdin di comando in modo che venga letto da HERE DOCUMENT Esempio: $ tr a-z A-Z <<END_TEXT > one two three > uno dos tres > END_TEXT ONE TWO THREE UNO DOS TRES

17 La shell – Redirezione dellI/O comando &> file: redirige stderr e stdout di comando su file comando 2> file: redirige stderr su file comando 1> file: redirige stdout su file (come comando > file) comando 1> filea 2>fileb: redirige stdout e stderr su file diversi

18 La shell redirezione dellI/O /dev/null è un file virtuale con la caratteristica di scartare (non memorizzare) tutti i dati che gli vengono scritti comando > /dev/null: scrive scartando i dati di output comando < /dev/null: legge un end-of-file EOF comando 2> /dev/null: ignora i messaggi di errore

19 La history : mostra i comandi eseguiti precedentemente history: visualizza tutti I comandi eseguiti su due colonne con Si può fare riferimento a un comando contenuto nella history attraverso il suo numero

20 La history !n: esegue il comando n Se n è negativo esegue ln-ultimo comando ! : esegue lultimo comando che comincia con !!:s/ / : rimpiazza la prima occorrenza di nellultimo comando con CTRL-r: entra in modalità di ricerca

21 Aliasing E possibile definire nuovi nomi da associare a un comando Il nuovo nome è un alias Il comando alias senza parametri visualizza gli alias definiti per la shell corrente alias = valore definisce un nuovo alias unalias : cancella lalias con nome

22 Aliasing Esempi: alias ll = ls –l alias rm = rm –i alias cd.. = cd.. alias dir = ls –l alias vi=vim Sono validi nella shell corrente Se inseriti in /home/ /.bashrc gli alias vengono definiti allavvio della shell

23 Espansione dei comandi La shell esegue una serie di espansioni o sostituzioni in un comando Esempio: ls $HOME La shell espande (o sostituisce) la variabile $HOME con il suo contenuto Il comando eseguito diventa ls /home/alice

24 Espansione dei comandi Il quoting serve a evitare lespansione Ci sono tre modi per fare quoting Usare il carattere \: preserva il valore letterale del carattere che segue Gli apici singoli : preservano il valore letterale del loro contenuto Gli apici doppi: come precedenti ma escluso $, $() e \

25 Espansione dei comandi La shell esegue lespansione in un ordine ben preciso dopo aver analizzato la riga di comando Brace Expansion: viene sostituito prima il contenuto delle parentesi graffe (se non quotate) Esempio: cat file{1,2,3}.txt viene sostituito da cat file1.txt file2.txt file3.txt Tilde Expansion: viene espanso i carattere tilde ~ (se non quotate) Esempio: cat ~/file.txt viene espanso in cat /home/alice/file.txt

26 Espansione dei comandi Parameter Expansion: si sostituisce il parametro col suo valore Esempio: dir=/tmp; find $dir –name *.c viene espanso in find /tmp -name *.c Command Expansion: si sostituisce con loutput del comando Esempio: cat $(find. –name *.c) viene espanso in cat main.c file1.c file2.c Supponendo che la directory corrente contenga i file main.c file1.c e file2.c

27 Espansione dei comandi Arithmetic Expansion: viene espanso il risultato di una operazione aritmetica Esempio: echo $((2*3+1)) viene espanso in echo 7 Word Splitting: la riga di comando viene suddivsa in parole

28 Espansione dei comandi Filename expansion: vengono sostituiti i nomi di file in corrispondenza di espressioni contenenti *, ? E [...] Esempio: cat *.c viene espanso in cat main.c file1.c file2.c (* = qualsiasi stringa) Esempio: cat file?.c viene espanso in cat file1.c file2.c (? = qualsiasi carattere singolo) Esempio: cat file[ab].c espanso in cat filea.c fileb.c ([ ] = qualsiasi carattere tra parentesi) Supponendo che la directory corrente contenga i file main.c file1.c e file2.c

29 Espansione dei comandi Quote Removal: tutte le occorrenze non quotate dei caratteri \ e vengono rimossi a meno che queste non siano il risultato di una espansione Esempio echo Hello World espanso in echo Hello World Esempio: var= hello lespansione di echo $var da come risultato echo hello Gli apici doppi sono il risultato della parameter expansion della variabile var e quindi non vengono rimossi quando viene eseguito il quote removal

30 Esempio Come vengono espansi i seguenti comandi? so_es= ~/so_es backup_dir=backup_$(date) mkdir -p $so_es/$backup_dir cp –r ~/so_es1/*.{c,h} ~/so_es1/$backup_dir


Scaricare ppt "Sistemi Operativi – La shell Salvatore Campagna Politecnico di Torino Dipartimento di Automatica."

Presentazioni simili


Annunci Google