SlideShare a Scribd company logo
1 of 75
Download to read offline
Programmazione Bash ShellProgrammazione Bash Shell
Concetti e Fondamenti per la programmazione di
script e procedure in Shell Bash
Docente: Franco Tampieri
FONDAZIONE ALDINI VALERIANI
per lo sviluppo della cultura tecnica
PERCHE' UN CORSO SULLA
BASH?!?
La risposta è semplice, avete mai provato a
digitare sulla console del vostro sistema UNIX:
:/> man bash
Quasi 4000 righe di manuale tecnico senza
esempi... insomma come posso muovermi fra
tante informazioni e arrivare il prima possibile a
quello che mi serve per la soluzione del mio
problema?
PRIMO GIORNO
● Le Shell di UNIX: similitudini, differenze e
compatibilità
● Funzionalità interattive della shell Bash
● Lancio di una procedura Bash
● Variabili Locali e d'Ambiente
Che cosa è una Shell?
●Breve definizione
●Storia
●Struttura (Concetto di Software a Livelli)
DEFINIZIONE: SHELL
● In genere di cosa si parla quando si accenna
alla shell?
– La Shell genericamente identifica la “linea di
comando” del Sistema Operativo.
– La shell è contemporanea allo Unix
– E' un interprete di comandi
– E' un linguaggio di programmazione interpretato
DEFINIZIONE: SHELL
● Diamogli una definizione meno granulare e
confusionaria:
– Il nome SHELL deriva dal tipo di compito che ha
questo programma; come una conchiglia bivalve
protegge il mollusco al suo interno, così la shell
“ricopre” il nucleo o Kernel del sistema operativo
per nascondere i dettagli e rendere disponibili le
funzionalità evolute in maniera che l'user (utente)
non debba preoccuparsi di come realizzarle.
DEFINIZIONE: SHELL
● Hm... beh questa
immagine non rende
l'idea :)
DEFINIZIONE: SHELL
● Si, questa è già
meglio ma manca
qualche cosa...
DEFINIZIONE: SHELL
● Ecco questa è
perfetta!!!
DEFINIZIONE: SHELL
– La SHELL quindi è l'interfaccia tra il sistema
Operativo e l'utente. Interpreta i comandi inseriti a
terminale o raccolti in un file (Script), li mette in
esecuzione.
● Ma come mai si è avuta la necessità di creare
un programma simile?
– I processori comandi realizzano una “interfaccia
veloce” fra l'utente e il sistema operativo, senza
necessariamente vincolare chi ne fa uso ad un
lungo apprendimento di uno specifico linguaggio di
programmazione.
DEFINIZIONE: SHELL
In conclusione la shell è un interprete o
processore di comandi che mette a disposizione
svariate funzioni di programmazione e non.
Esegue in maniera veloce comandi inseriti da
parte dell'utente stesso.
Non necessita obbligatoriamente della
conoscenza di un linguaggio di programmazione
per utilizzare le sue funzioni principali
COMPORTAMENTO DI UNA
SHELL
Lo schema base di funzionamento può essere
riassunto così:
Loop forever
<accetta comando da console>
<esegui comando>
end Loop
COMPORTAMENTO DI UNA
SHELL
Se il sistema su cui viene eseguita ha prevede
l'autenticazione per l'accesso:
Loop forever
<LOGIN>
repeat
<accetta comando da console>
<esegui comando>
until <fine file>
<LOGOUT>
end Loop
PROCESSO
Processo: è l'ambiente in cui è eseguito un
programma: può essere di due tipi:
●User
Kernel (o System)
LE SHELL UNIX
● Un po' di storia sulle shell UNIX
– La prima shell UNIX fu' la Thompson Shell (sh),
creata da Ken Thompson nel laboratori della Bell.
Venne distribuita dalla versione 1 alla 6 di Unix, dal
1971 al 1975. E' considerata veramente
rudimentale per gli standard moderni di produzione.
– La seconda shell Unix è stata la PWB Shell o
Mashey shell, una diramazione (fork) della shell di
Thompson distribuita con lo “UNIX
PROGRAMMER'S WORKBENCH” nel 1976
LE SHELL UNIX
Nel tempo sono state create una serie di shell di
tipo diverso.
Siccome ogni Shell non è altro che un programma
eseguibile che realizza il supporto per la
invocazione dei comandi, è possibile passare da
una shell di UNIX ad un'altra tramite invocazione
diretta.
LE SHELL UNIX
A differenza di particolari sistemi operativi dove si
è vincolati ad una sola shell nei sistemi Linux è
possibile scegliere quale shell utilizzare a
seconda della propria esperienza e delle proprie
necessità .
Le shell presenti nel nostro sistema sono elencate
nel file '/etc/shells'
LE SHELL UNIX
● Le principali shell UNIX presenti sono le
seguenti:
– csh (C-Shell) e tcsh (Tenex C-Shell)
– ksh (Korn Shell) e zsh (Z-Shell) e bash (Bourne
Again Shell)
LE SHELL UNIX [csh]
● La csh ha le seguenti caratteristiche:
– Job Control: è la proprietà di sospendere e
ripristinare in modo interattivo un Job (processo), e
anche di mandarlo in esecuzione in background.
– History substitution: è la caratteristica di permettere
ai comandi precedenti di poter essere rieseguiti o
editati in vari modi.
– Array: gestisce variabili contenenti elementi multipli
che possono essere indicizzati numericamente.
– ~: introduce l'operatore tilde per indicare la directory
home dell'utente.
LE SHELL UNIX [csh]
– Alias: è la proprietà di assegnare un nome ad un
comando o ad una sequenza di comandi.
– Operazioni Matematiche: permette di eseguire
operazioni matematiche semplici in shell senza
utilizzare programmi esterni.
DIFFERENZE RISPETTO A BASH
– Incompatibilità di sintassi.
– Effetti impredicibili degli errori di sintassi.
LE SHELL UNIX [tcsh]
● La tcsh ha le seguenti caratteristiche:
– Compatibilità completa con csh.
– File completion
– Command line Editing
– La sintassi del linguaggio scripting è C-Like come in
csh.
DIFFERENZE RISPETTO A BASH
– La programmazione in tcsh è considerata
difficoltosa.
LE SHELL UNIX [ksh]
● La ksh ha le seguenti caratteristiche:
– La sua sintassi è molto simile ad un linguaggio di
programmazione.
– ksh supporta gli Array Associativi e operazioni in
virgola mobile
– La ksh è stata a pagamento fino al 2000, questo ne
ha limitato moltissimo l'utilizzo e la diffusione.
N.B. Alcuni linguaggi ammettono indici di tipo non
numerico, per esempio stringhe. Si parla in questo
caso di hash table, o di array associativo, perché
ogni valore stringa utilizzato come indice viene
associato a un valore dell'array.
LE SHELL UNIX [zsh]
● La zsh viene considerata una extended bash,
perché contiene le caratteristiche più utili di
bash, ksh e tcsh. Le sue caratteristiche salienti
sono:
– La completion della stringa di comando è
completamente configurabile dall'utente.
– L'History dei comandi può essere condivisa fra tutte
le shell in esecuzione.
– Extended file globbing permette la specifica dei file
senza avere bisogno ricorrere a programmi esterni
tipo find.
LE SHELL UNIX [zsh]
– E' migliorata la maneggiabilità di array e vettori.
– Si possono editare comandi multi linea in un solo
buffer.
– Permette la correzione automatica degli errori di
ortografia.
– Diversi modi di emulazione possibili (es. può essere
avviato come se fosse un Bourne Shell).
– Prompt configurabile, è possibile inserire
informazioni sul lato destro dello schermo che si
auto-nascondono quando si sta scrivendo a lungo.
– Completamente configurabile.
LE SHELL UNIX [zsh]
Come è ovvio essendo una shell ricca di
caratteristiche, è di conseguenza anche molto
voluminosa, e questo ne ha ridotto la diffusione in
vari ambiti.
La seguente citazione è ripresa da WikiPedia:
“Attesting to the sheer size of this shell is the now
famous first sentence of the shell's manual page,
which reads "Because zsh contains many
features, the zsh manual has been split into a
number of sections", and then goes on to list
thirteen items”
LE SHELL UNIX [bash]
● La bash nasce dal progetto GNU, è la shell di
default sulla maggior parte delle distribuzioni
Linux in commercio. La shell bash ha le
seguenti caratteristiche::
– La sintassi dei comandi è un super-set della Bourne
Shell. (Piena Compatibilità)
– La sintassi dei comandi include caratteristiche
presenti nella ksh, csh come:
● la Command line Editing, la Command History, la
Directory Stack, le variabili $RANDOM e $PPID, e la
proprietà dello standard POSIX per la sostituzione dei
sintassi dei comandi: $(...)
LE SHELL UNIX [bash]
– Quando viene utilizzata in modalità interattiva, la
pressione del tasto TAB attiva il completamento
automatico dei nomi parzialmente digitati di
programmi, nomi di file, nomi di variabili etc. etc.
– Si possono eseguire operazioni su numeri interi
– Ha una gestione semplificata della ridirezione
dell'I/O rispetto alla Bourne Shell (command &> file
è equivalente a command > file 2>&1)
LE SHELL UNIX [CONCLUSIONI]
Si può capire, volendo tracciare una direttrice
comune a tutte le shell, che esse condividono
alcuni concetti:
● Sono tutte distinte dal kernel e vengono
eseguite come programmi utente.
● Ognuna può essere personalizzata
attraverso la modifica dei file di
configurazione del proprio ambiente
operativo.
● Le Shell possono venire eseguite sia in modo
interattivo tramite gli utenti sia in modo non
interattivo tramite chiamate al sistema
operativo.
LA BASH SHELL
Come è stato evidenziato prima la bash, prima di
mettere in esecuzione un comando, può operare
delle trasformazioni sullo stesso: espansione dei
metacaratteri, la ridirezione e il piping, la ricerca
del comando da eseguire nei direttori secondo un
certo ordine e la esecuzione del comando stesso.
Una volta eseguito il comando, la bash ritorna un
codice (return code); questo a sua volta può
essere usato in comandi successivi.
LA BASH SHELL
I file di configurazione :
La shell può usare cinque files di configurazione,
ma spesso nelle varie distribuzioni non vengono
usati tutti, d'altra parte vedremo che non è difficile
crearsene di propri. I file sono:
/etc/profile file globale
/etc/bashrc file globale
~/.bash_profile file locale
~/.bashrc file locale
~/.bash_logout file locale
LA BASH SHELL
N.B. File globali contengono direttive di
configurazione valide per tutti gli utenti mentre file
locali, contengono direttive di configurazione
valide solo per l'utente che possiede la cartella
nella directory /home che li contiene.
LA BASH SHELL
Esiste inoltre esiste una directory /etc/skel
(abbreviazione di skeleton) dove è possibile
inserire un files .bashrc .bash_logout
.bash_profile che saranno inseriti nella home
directory dei nuovi utenti e che rappresenteranno
la base per la loro configurazione e
personalizzazione dell'ambiente di lavoro.
LA BASH SHELL
/etc/profile
E' il file di configurazione globale che determina le
variabili di ambiente e i programmi da eseguire
per ogni utente che manda in esecuzione la shell.
Per fare un paragone con il mondo Dos potrebbe
essere qualcosa di molto simile al file
autoexec.bat.
LA BASH SHELL
/etc/bashrc
E' un file di configurazione globale molto simile al
precedente, per questo motivo spesso non e'
usato, contiene alias (collegamenti brevi a
comandi molto lunghi), e pezzi di codice nel
linguaggio di scripting della shell che devono
essere eseguiti alla partenza della shell. Tutto può
essere spostato senza problema nel file
/etc/profile.
LA BASH SHELL
~/.bash_profile
E' un file di configurazione locale che contiene
direttive di configurazione e variabili di ambiente
specifiche dell'utente al quale appartiene la
directory /home in cui si trova. Il file viene letto ed
eseguito successivamente a quelli globali e
modifica o sovrascrive variabili che riguardano
esclusivamente l'utente.
LA BASH SHELL
~/.bashrc
E' un file di configurazione locale che contiene
direttive di configurazione come gli alias, o
funzioni definite dall'utente. Il file viene letto ed
eseguito successivamente a quelli globali, gli alias
o le funzioni saranno specifici dell'utente e non
influenzeranno nessun altro utente.
E' il corrispondente locale di /etc/bashrc.
LA BASH SHELL
~/.bash_logout
E' un file di configurazione locale che contiene
comandi da eseguire quando l'utente esce dalla
shell. I comandi influenzano solo l'utente che
possiede la cartella /home nella quale si trova.
LA BASH SHELL
VEDIAMO ORA LA STRUTTURA E IL LANCIO DI
UNA PROCEDURA BASH
N.B. Questo concetto verrà poi espanso
ulteriormente nel corso delle lezioni
LA BASH SHELL
● La procedura BASH è anche chiamata “script”,
perché si tratta sempre di un file di testo.
● All'interno i commenti iniziano con il carattere #
● La struttura di uno “script” è molto semplice: ha
2 sole parti, di cui una è persino opzionale.
Esse sono:
– Il preambolo: è opzionale e ha la forma di
una riga di commento. Definisce quale shell
deve essere utilizzata per eseguire quel dato
script.
LA BASH SHELL
– Il corpo dello script: è la parte che elenca i
comandi elementari da eseguire, disposti su
righe diverse o sulla medesima riga,
eventualmente separati dal “;”.
N.B. Vedi esempio di script “Hello World”
LA BASH SHELL
Per eseguire il semplice script appena mostrato la
prima cosa da fare è renderlo eseguibile con il
comando chmod +x nomefile
Questo, perché ogni script è essenzialmente un
file di testo, quindi il diritto di esecuzione è negato
per default.
LA BASH SHELL
Si noti che deve essere dato il nome assoluto del
comando, perché il direttorio in cui risiede non è
necessariamente incluso nella variabile PATH.
N.B. l'argomento verrà trattato meglio in seguito
LA BASH SHELL
Diamo uno sguardo a quello che succede quando
una procedura viene eseguita.
LA BASH SHELL
La SHELL viene lanciata al Login dell'utente
(schema iniziale SHELL), creando il relativo
processo (ambiente di esecuzione).
È la SHELL di base, che si occupa di lanciare
altre SHELL per l'esecuzione dei comandi di
utente. La si può definire Shell PADRE.
LA BASH SHELL
– Quando viene richiesta l'esecuzione di uno
script, la SHELL PADRE crea una SHELL FIGLIO
seguendo la direttiva contenuta nel preambolo.
–La SHELL FIGLIO esegue il comando passatogli
dalla SHELL PADRE
LA BASH SHELL
– Quando viene richiesta l'esecuzione di uno
script, la SHELL PADRE crea una SHELL FIGLIO
seguendo la direttiva contenuta nel preambolo.
–La SHELL FIGLIO esegue il comando passatogli
dalla SHELL PADRE (Es. con lo script Hello
World, viene eseguito il comando echo sullo
standard output la stringa e il parametro
passatogli dalla SHELL PADRE)
LA BASH SHELL
SHELL
PADRE
SHELL
FIGLIO
Generazione
Esecuzione
Risultato
Attesa del
Completamento
LA BASH SHELL [VARIABILI]
Il metodo più usato per archiviare
temporaneamente uno o più valori consiste
nell'usare le variabili, cioè usare un'area di
memoria del computer assegnandogli un nome a
cui si possa far riferimento in seguito per
recuperare il valore assegnato.
LA BASH SHELL [VARIABILI]
Bash considera le variabili come se fossero
esclusivamente stringhe di caratteri.
Per le operazioni numeriche sulle variabili è
necessario usare il comando expr
> a=2
> b=3
> expr $a + $b
5
LA BASH SHELL [VARIABILI]
Le variabili possono essere:
● Locali: proprie di un singolo ambiente
utente
● Globali: proprie di tutti gli ambienti
LA BASH SHELL [VARIABILI]
Le variabili di ambiente sono quelle variabili
create autonomamente dal sistema operativo e
normalmente sono definite nel file '/etc/profile' ,
come per esempio SHELL, PS1, PS2 .
Sono in definitiva quelle variabili proprie di ogni
singolo processo in esecuzione.
LA BASH SHELL [VARIABILI]
Le variabili locali sono quelle variabili definite
dall'utente e sono generalmente definite nel file
~/.bashrc che si trova nella /home dell'utente del
quale possono influenzare l'ambiente.
N.B. E' necessario un chiarimento!
LA BASH SHELL [VARIABILI]
La definizione di una variabile avviene in un
modo intuitivo e elementare.
Consta di tre parti: il nome della variabile seguito
dall'operatore di assegnamento "=" e il valore da
assegnare, cioè:
'nome_variabile=valore_variabile'
LA BASH SHELL [VARIABILI]
Una volta definita la variabile la possiamo rendere
disponibile a tutti i programmi che l'utente usa con
il comando export :
'export nome_variabile'
N.B. Questo rende la variabile “Globale”
LA BASH SHELL [VARIABILI]
Per accedere al valore di una variabile cioè per
recuperarne il valore dobbiamo far precedere al
nome variabile il suffisso "$".
Per esempio per conoscere il valore della
variabile SHELL possiamo digitare il comando:
'echo $SHELL'
Che informazione si avrà a video?
LA BASH SHELL [PATH]
La prima variabile da configurare è la variabile
PATH che definisce le directory a cui possiamo
accedere da qualsiasi punto del filesystem.
Per esempio potremmo avere un programma nella directory
'/bin' chiamato mio_prog, se la directory '/bin' è presente nella
variabile PATH possiamo lanciare il programma da qualsiasi
posizione nel filesystem, altrimenti saremmo costretti o a
digitare l'intero percorso '/bin/mio_prog' oppure portarci nella
directory digitando prima 'cd /bin' e successivamente
'./mio_prog'.
LA BASH SHELL [PATH]
l punto e la barra traversa (slash) che precedono
il nome del programma dicono alla shell di
cercare di eseguire quel file se ci sono i permessi
adatti. La variabile PATH è definita in /etc/profile e
ha una sintassi leggermente diversa dal normale;
ogni percorso di directory alla destra
dell'operatore di assegnazione "=" e separata dal
carattere ":" ,esempio:
PATH=/bin:/usr/bin:/usr/local/bin
export PATH
LA BASH SHELL [PATH]
La variabile dell'esempio precedente rende
possibile mandare in esecuzione da qualsiasi
punto del filesystem tutti gli eseguibili che si
trovano nelle cartelle dichiarate.
LA BASH SHELL [PATH]
Se noi volessimo aggiungere altri valori alla
variabile PATH potremmo digitare semplicemente:
PATH=$PATH:/home/test/bin
export PATH
che aggiungerà al valore già' esistente della
variabile PATH il nostro nuovo valore, infatti il
nome variabile preceduto dal simbolo "$" verrà
espanso con il contenuto originale della variabile.
LA BASH SHELL [PATH]
Per fissare meglio le idee:
/bin:/usr/bin:/usr/local/bin
che diventerà
/bin:/usr/bin:/usr/local/bin:/home/test/bin
Si può modificare il proprio path inserendo il
comando precedente in ~/.bash_profile.
LA BASH SHELL [PROMPT]
Il prompt non è altro che il sistema in attesa di
input dall'utente, la sua forma varia da
distribuzione a distribuzione e può avere una
struttura simile a questa:
nome_utente@nome_computer:[#,$,>]
Che risulterebbe:
root@localhost:#
LA BASH SHELL [PROMPT]
root@localhost:#
Questo prompt può essere specialmente utile per
le persone che accedono a varie macchine con
account con nomi diversi, serve per ricordarsi
sempre su quale pc stiamo lavorando e di quali
privilegi disponiamo.
LA BASH SHELL [PROMPT]
E' possibile personalizzare le informazioni del
prompt assegnando dei particolari valori alla
variabile PS1
Questa variabile accetta dei valori predefiniti che
sono ottenuti facendo seguire alla barra
rovesciata (backslash)
[Rif. Documento Elenco Variabili Interne e
comandi]
LA BASH SHELL [PROMPT]
Utilizzando la bash, si può impostare il prompt
cambiando il valore della variabile d'ambiente
PS1, come segue:
$ PS1="> "
$ PS1="Il mio super prompt > "
$ PS1="`uname -r` $ "
$ PS1="u@H > "
N.B. Verificare a terminale quali sono gli effetti di
questi comandi.
LA HISTORY DELLA BASH
La shell e' in grado di ricordare i comandi immessi
dall'utente che normalmente sono salvati nel file
~/.bash_history e possono essere richiamati
premendo i tasti freccia in su' e freccia in giù,
questo comportamento può essere modificato
configurando le variabili:
HISTSIZE
HISTFILE
HISTFILESIZE
LA HISTORY DELLA BASH
E' da ricordare che per abitudine le variabili di
ambiente vengono indicate usando lettere
maiuscole a differenza delle locali per cui si usano
le minuscole. Queste variabili sono definite in
/etc/profile ma possono essere
sovrascritte in ~/.bash_profile.
LA HISTORY DELLA BASH
HISTSIZE
Definisce il numero massimo dei comandi da
memorizzare nel file storico normalmente il valore
preimpostato è 500 o più comandi.
HISTSIZE=10
Memorizza solo 10 comandi nella HISTORY
LA HISTORY DELLA BASH
HISTFILE
Indica il file che deve essere usato per contenere i
comandi digitati normalmente il valore
preimpostato è ~/.bash_history, può anche non
essere impostato, lo storico si limiterà alla
sessione di lavoro corrente.
HISTFILE=~/.storico_comandi
Memorizza la HISTORY nel file .storico_comandi
LA HISTORY DELLA BASH
HISTFILESIZE
Determina la grandezza fisica massima che può
avere il file dello storico.
HISTFILESIZE=1000
Vengono memorizzate 1000 righe di HISTORY
HISTFILESIZE=0
Con questo parametro la History non viene
memorizzata a fine sessione
LA BASH SHELL [ALIAS]
Gli alias si possono definire come comandi
"accorciati". Se vogliamo chiamare un comando
lungo in maniera più mnemonica possiamo
assegnarlo ad un alias.
LA BASH SHELL [ALIAS]
Se per esempio volessimo evitare di digitare
ogni volta il comando:
ls -laF
potremmo assegnarlo nel file /etc/bashrc oppure
~/.bashrc nel seguente modo:
alias ls='ls -laF'
Si possono definire quanti alias servono senza
particolari limiti.
FINE PRIMO GIORNO
● Domande?
● Esercizi e compiti da fare :)

More Related Content

What's hot

Linux@Unina
Linux@UninaLinux@Unina
Linux@UninaNaLUG
 
Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumateMarco Buttolo
 
Post gresql su_raspberry
Post gresql su_raspberryPost gresql su_raspberry
Post gresql su_raspberryMarco Buttolo
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linuxGiuseppe Piccolo
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Marco Chiesi
 
Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
 Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti... Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...Fulvio Corno
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!MarioTraetta
 
Assembly and Reverse Engineering
Assembly and Reverse EngineeringAssembly and Reverse Engineering
Assembly and Reverse Engineeringluigi capuzzello
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla PiazzaFabiano Dalla Piazza
 

What's hot (19)

Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Socket python
Socket pythonSocket python
Socket python
 
Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
Linux shell
Linux shellLinux shell
Linux shell
 
#!/bin/bash ed esempi di scripting
#!/bin/bash ed esempi di scripting#!/bin/bash ed esempi di scripting
#!/bin/bash ed esempi di scripting
 
Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumate
 
Post gresql su_raspberry
Post gresql su_raspberryPost gresql su_raspberry
Post gresql su_raspberry
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linux
 
Protocollo ssh
Protocollo sshProtocollo ssh
Protocollo ssh
 
J huery
J hueryJ huery
J huery
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Bash intro
Bash introBash intro
Bash intro
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018
 
Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
 Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti... Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
X2 Linux Riassunti
X2 Linux RiassuntiX2 Linux Riassunti
X2 Linux Riassunti
 
Assembly and Reverse Engineering
Assembly and Reverse EngineeringAssembly and Reverse Engineering
Assembly and Reverse Engineering
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla Piazza
 
As it e icloud
As it e icloudAs it e icloud
As it e icloud
 

Viewers also liked

Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux alberto fiaschi
 
Integrazione di uno spazio virtuale per la scuola
Integrazione di uno spazio virtuale per la scuolaIntegrazione di uno spazio virtuale per la scuola
Integrazione di uno spazio virtuale per la scuolaLaura Antichi
 
Ludicizzazione di un MOOC in Moodle
Ludicizzazione di un MOOC in MoodleLudicizzazione di un MOOC in Moodle
Ludicizzazione di un MOOC in MoodleGabriella Dodero
 
Corso cad modulo 3_dsga_sl
Corso cad modulo 3_dsga_slCorso cad modulo 3_dsga_sl
Corso cad modulo 3_dsga_slGrimaldi Mario
 
wordpressnonsoloperblogger-beta
wordpressnonsoloperblogger-betawordpressnonsoloperblogger-beta
wordpressnonsoloperblogger-betaNicola D'Agostino
 
Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"
Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"
Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"Mario Varini
 
Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...
Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...
Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...Mario Varini
 
Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...
Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...
Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...Mario Varini
 
Tre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare LinuxTre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare LinuxGabriella Dodero
 
Giornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuola
Giornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuolaGiornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuola
Giornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuolaMario Varini
 
Progetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaProgetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaBergamo Linux Users Group
 
Elaborazione dati dalla riga di comando Linux
Elaborazione dati dalla riga di comando LinuxElaborazione dati dalla riga di comando Linux
Elaborazione dati dalla riga di comando LinuxBergamo Linux Users Group
 
Introduzione agli strumenti Moodle per docenti / 3
Introduzione agli strumenti Moodle per docenti / 3Introduzione agli strumenti Moodle per docenti / 3
Introduzione agli strumenti Moodle per docenti / 3Paolo Porcaro
 
Introduzione agli strumenti Moodle per docenti / 2
Introduzione agli strumenti Moodle per docenti / 2Introduzione agli strumenti Moodle per docenti / 2
Introduzione agli strumenti Moodle per docenti / 2Paolo Porcaro
 
Siti web scolastici - corso base indirizzato ai DSGA neo immessi in ruolo
Siti web scolastici - corso base indirizzato ai DSGA neo immessi in ruoloSiti web scolastici - corso base indirizzato ai DSGA neo immessi in ruolo
Siti web scolastici - corso base indirizzato ai DSGA neo immessi in ruoloMichele Maffucci
 
Uso del sistema operativo 1
Uso del sistema operativo 1Uso del sistema operativo 1
Uso del sistema operativo 1Franco Marra
 
Presentazione gasw 13 5 16
Presentazione gasw 13 5 16Presentazione gasw 13 5 16
Presentazione gasw 13 5 16Antonio Todaro
 

Viewers also liked (20)

Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux
 
Integrazione di uno spazio virtuale per la scuola
Integrazione di uno spazio virtuale per la scuolaIntegrazione di uno spazio virtuale per la scuola
Integrazione di uno spazio virtuale per la scuola
 
Ludicizzazione di un MOOC in Moodle
Ludicizzazione di un MOOC in MoodleLudicizzazione di un MOOC in Moodle
Ludicizzazione di un MOOC in Moodle
 
Corso cad modulo 3_dsga_sl
Corso cad modulo 3_dsga_slCorso cad modulo 3_dsga_sl
Corso cad modulo 3_dsga_sl
 
wordpressnonsoloperblogger-beta
wordpressnonsoloperblogger-betawordpressnonsoloperblogger-beta
wordpressnonsoloperblogger-beta
 
Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"
Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"
Bassano del Grappa 22 aprile 2015 "Verso la scuola del futuro"
 
Manifesto - Distribuzioni Linux
Manifesto - Distribuzioni LinuxManifesto - Distribuzioni Linux
Manifesto - Distribuzioni Linux
 
Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...
Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...
Presentazione Smau 2012:La digitalizzazione dei processi amministrativi a scu...
 
Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...
Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...
Smau Milano 2011: La dematerializzazione dei documenti a scuola. Procedure, s...
 
Tre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare LinuxTre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare Linux
 
Giornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuola
Giornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuolaGiornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuola
Giornataaperta Milano 13 maggio 2013 Varini dematerializzazione a scuola
 
Progetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaProgetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnica
 
Elaborazione dati dalla riga di comando Linux
Elaborazione dati dalla riga di comando LinuxElaborazione dati dalla riga di comando Linux
Elaborazione dati dalla riga di comando Linux
 
Progetto Linux va a scuola
Progetto Linux va a scuolaProgetto Linux va a scuola
Progetto Linux va a scuola
 
Introduzione agli strumenti Moodle per docenti / 3
Introduzione agli strumenti Moodle per docenti / 3Introduzione agli strumenti Moodle per docenti / 3
Introduzione agli strumenti Moodle per docenti / 3
 
Introduzione agli strumenti Moodle per docenti / 2
Introduzione agli strumenti Moodle per docenti / 2Introduzione agli strumenti Moodle per docenti / 2
Introduzione agli strumenti Moodle per docenti / 2
 
Siti web scolastici - corso base indirizzato ai DSGA neo immessi in ruolo
Siti web scolastici - corso base indirizzato ai DSGA neo immessi in ruoloSiti web scolastici - corso base indirizzato ai DSGA neo immessi in ruolo
Siti web scolastici - corso base indirizzato ai DSGA neo immessi in ruolo
 
Uso del sistema operativo 1
Uso del sistema operativo 1Uso del sistema operativo 1
Uso del sistema operativo 1
 
2 eLearning e Moodle
2 eLearning e Moodle2 eLearning e Moodle
2 eLearning e Moodle
 
Presentazione gasw 13 5 16
Presentazione gasw 13 5 16Presentazione gasw 13 5 16
Presentazione gasw 13 5 16
 

Similar to Corso Bash

Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroDario Mazza
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 
Sistema operativo Unix e Linux
Sistema operativo Unix e LinuxSistema operativo Unix e Linux
Sistema operativo Unix e LinuxGiulia Shkreli
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]Matteo Collica
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxPaolo Campegiani
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesMaurizio Antonelli
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreDario Mazza
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Lug Roma3 Corso Linux Base
Lug Roma3   Corso Linux BaseLug Roma3   Corso Linux Base
Lug Roma3 Corso Linux Basefosk
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsGaetano Giunta
 
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1caioturtle
 
Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding LinuxNaLUG
 

Similar to Corso Bash (20)

Linux shell
Linux shellLinux shell
Linux shell
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione Quattro
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
Sistema operativo Unix e Linux
Sistema operativo Unix e LinuxSistema operativo Unix e Linux
Sistema operativo Unix e Linux
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
 
Lezione tre
Lezione treLezione tre
Lezione tre
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione Tre
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Lug Roma3 Corso Linux Base
Lug Roma3   Corso Linux BaseLug Roma3   Corso Linux Base
Lug Roma3 Corso Linux Base
 
Bash programming
Bash programmingBash programming
Bash programming
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
 
Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding Linux
 

Corso Bash

  • 1. Programmazione Bash ShellProgrammazione Bash Shell Concetti e Fondamenti per la programmazione di script e procedure in Shell Bash
  • 2. Docente: Franco Tampieri FONDAZIONE ALDINI VALERIANI per lo sviluppo della cultura tecnica
  • 3. PERCHE' UN CORSO SULLA BASH?!? La risposta è semplice, avete mai provato a digitare sulla console del vostro sistema UNIX: :/> man bash
  • 4.
  • 5. Quasi 4000 righe di manuale tecnico senza esempi... insomma come posso muovermi fra tante informazioni e arrivare il prima possibile a quello che mi serve per la soluzione del mio problema?
  • 6. PRIMO GIORNO ● Le Shell di UNIX: similitudini, differenze e compatibilità ● Funzionalità interattive della shell Bash ● Lancio di una procedura Bash ● Variabili Locali e d'Ambiente
  • 7. Che cosa è una Shell? ●Breve definizione ●Storia ●Struttura (Concetto di Software a Livelli)
  • 8. DEFINIZIONE: SHELL ● In genere di cosa si parla quando si accenna alla shell? – La Shell genericamente identifica la “linea di comando” del Sistema Operativo. – La shell è contemporanea allo Unix – E' un interprete di comandi – E' un linguaggio di programmazione interpretato
  • 9. DEFINIZIONE: SHELL ● Diamogli una definizione meno granulare e confusionaria: – Il nome SHELL deriva dal tipo di compito che ha questo programma; come una conchiglia bivalve protegge il mollusco al suo interno, così la shell “ricopre” il nucleo o Kernel del sistema operativo per nascondere i dettagli e rendere disponibili le funzionalità evolute in maniera che l'user (utente) non debba preoccuparsi di come realizzarle.
  • 10. DEFINIZIONE: SHELL ● Hm... beh questa immagine non rende l'idea :)
  • 11. DEFINIZIONE: SHELL ● Si, questa è già meglio ma manca qualche cosa...
  • 12. DEFINIZIONE: SHELL ● Ecco questa è perfetta!!!
  • 13. DEFINIZIONE: SHELL – La SHELL quindi è l'interfaccia tra il sistema Operativo e l'utente. Interpreta i comandi inseriti a terminale o raccolti in un file (Script), li mette in esecuzione. ● Ma come mai si è avuta la necessità di creare un programma simile? – I processori comandi realizzano una “interfaccia veloce” fra l'utente e il sistema operativo, senza necessariamente vincolare chi ne fa uso ad un lungo apprendimento di uno specifico linguaggio di programmazione.
  • 14. DEFINIZIONE: SHELL In conclusione la shell è un interprete o processore di comandi che mette a disposizione svariate funzioni di programmazione e non. Esegue in maniera veloce comandi inseriti da parte dell'utente stesso. Non necessita obbligatoriamente della conoscenza di un linguaggio di programmazione per utilizzare le sue funzioni principali
  • 15. COMPORTAMENTO DI UNA SHELL Lo schema base di funzionamento può essere riassunto così: Loop forever <accetta comando da console> <esegui comando> end Loop
  • 16. COMPORTAMENTO DI UNA SHELL Se il sistema su cui viene eseguita ha prevede l'autenticazione per l'accesso: Loop forever <LOGIN> repeat <accetta comando da console> <esegui comando> until <fine file> <LOGOUT> end Loop
  • 17. PROCESSO Processo: è l'ambiente in cui è eseguito un programma: può essere di due tipi: ●User Kernel (o System)
  • 18. LE SHELL UNIX ● Un po' di storia sulle shell UNIX – La prima shell UNIX fu' la Thompson Shell (sh), creata da Ken Thompson nel laboratori della Bell. Venne distribuita dalla versione 1 alla 6 di Unix, dal 1971 al 1975. E' considerata veramente rudimentale per gli standard moderni di produzione. – La seconda shell Unix è stata la PWB Shell o Mashey shell, una diramazione (fork) della shell di Thompson distribuita con lo “UNIX PROGRAMMER'S WORKBENCH” nel 1976
  • 19. LE SHELL UNIX Nel tempo sono state create una serie di shell di tipo diverso. Siccome ogni Shell non è altro che un programma eseguibile che realizza il supporto per la invocazione dei comandi, è possibile passare da una shell di UNIX ad un'altra tramite invocazione diretta.
  • 20. LE SHELL UNIX A differenza di particolari sistemi operativi dove si è vincolati ad una sola shell nei sistemi Linux è possibile scegliere quale shell utilizzare a seconda della propria esperienza e delle proprie necessità . Le shell presenti nel nostro sistema sono elencate nel file '/etc/shells'
  • 21. LE SHELL UNIX ● Le principali shell UNIX presenti sono le seguenti: – csh (C-Shell) e tcsh (Tenex C-Shell) – ksh (Korn Shell) e zsh (Z-Shell) e bash (Bourne Again Shell)
  • 22. LE SHELL UNIX [csh] ● La csh ha le seguenti caratteristiche: – Job Control: è la proprietà di sospendere e ripristinare in modo interattivo un Job (processo), e anche di mandarlo in esecuzione in background. – History substitution: è la caratteristica di permettere ai comandi precedenti di poter essere rieseguiti o editati in vari modi. – Array: gestisce variabili contenenti elementi multipli che possono essere indicizzati numericamente. – ~: introduce l'operatore tilde per indicare la directory home dell'utente.
  • 23. LE SHELL UNIX [csh] – Alias: è la proprietà di assegnare un nome ad un comando o ad una sequenza di comandi. – Operazioni Matematiche: permette di eseguire operazioni matematiche semplici in shell senza utilizzare programmi esterni. DIFFERENZE RISPETTO A BASH – Incompatibilità di sintassi. – Effetti impredicibili degli errori di sintassi.
  • 24. LE SHELL UNIX [tcsh] ● La tcsh ha le seguenti caratteristiche: – Compatibilità completa con csh. – File completion – Command line Editing – La sintassi del linguaggio scripting è C-Like come in csh. DIFFERENZE RISPETTO A BASH – La programmazione in tcsh è considerata difficoltosa.
  • 25. LE SHELL UNIX [ksh] ● La ksh ha le seguenti caratteristiche: – La sua sintassi è molto simile ad un linguaggio di programmazione. – ksh supporta gli Array Associativi e operazioni in virgola mobile – La ksh è stata a pagamento fino al 2000, questo ne ha limitato moltissimo l'utilizzo e la diffusione. N.B. Alcuni linguaggi ammettono indici di tipo non numerico, per esempio stringhe. Si parla in questo caso di hash table, o di array associativo, perché ogni valore stringa utilizzato come indice viene associato a un valore dell'array.
  • 26. LE SHELL UNIX [zsh] ● La zsh viene considerata una extended bash, perché contiene le caratteristiche più utili di bash, ksh e tcsh. Le sue caratteristiche salienti sono: – La completion della stringa di comando è completamente configurabile dall'utente. – L'History dei comandi può essere condivisa fra tutte le shell in esecuzione. – Extended file globbing permette la specifica dei file senza avere bisogno ricorrere a programmi esterni tipo find.
  • 27. LE SHELL UNIX [zsh] – E' migliorata la maneggiabilità di array e vettori. – Si possono editare comandi multi linea in un solo buffer. – Permette la correzione automatica degli errori di ortografia. – Diversi modi di emulazione possibili (es. può essere avviato come se fosse un Bourne Shell). – Prompt configurabile, è possibile inserire informazioni sul lato destro dello schermo che si auto-nascondono quando si sta scrivendo a lungo. – Completamente configurabile.
  • 28. LE SHELL UNIX [zsh] Come è ovvio essendo una shell ricca di caratteristiche, è di conseguenza anche molto voluminosa, e questo ne ha ridotto la diffusione in vari ambiti. La seguente citazione è ripresa da WikiPedia: “Attesting to the sheer size of this shell is the now famous first sentence of the shell's manual page, which reads "Because zsh contains many features, the zsh manual has been split into a number of sections", and then goes on to list thirteen items”
  • 29. LE SHELL UNIX [bash] ● La bash nasce dal progetto GNU, è la shell di default sulla maggior parte delle distribuzioni Linux in commercio. La shell bash ha le seguenti caratteristiche:: – La sintassi dei comandi è un super-set della Bourne Shell. (Piena Compatibilità) – La sintassi dei comandi include caratteristiche presenti nella ksh, csh come: ● la Command line Editing, la Command History, la Directory Stack, le variabili $RANDOM e $PPID, e la proprietà dello standard POSIX per la sostituzione dei sintassi dei comandi: $(...)
  • 30. LE SHELL UNIX [bash] – Quando viene utilizzata in modalità interattiva, la pressione del tasto TAB attiva il completamento automatico dei nomi parzialmente digitati di programmi, nomi di file, nomi di variabili etc. etc. – Si possono eseguire operazioni su numeri interi – Ha una gestione semplificata della ridirezione dell'I/O rispetto alla Bourne Shell (command &> file è equivalente a command > file 2>&1)
  • 31. LE SHELL UNIX [CONCLUSIONI] Si può capire, volendo tracciare una direttrice comune a tutte le shell, che esse condividono alcuni concetti: ● Sono tutte distinte dal kernel e vengono eseguite come programmi utente. ● Ognuna può essere personalizzata attraverso la modifica dei file di configurazione del proprio ambiente operativo. ● Le Shell possono venire eseguite sia in modo interattivo tramite gli utenti sia in modo non interattivo tramite chiamate al sistema operativo.
  • 32. LA BASH SHELL Come è stato evidenziato prima la bash, prima di mettere in esecuzione un comando, può operare delle trasformazioni sullo stesso: espansione dei metacaratteri, la ridirezione e il piping, la ricerca del comando da eseguire nei direttori secondo un certo ordine e la esecuzione del comando stesso. Una volta eseguito il comando, la bash ritorna un codice (return code); questo a sua volta può essere usato in comandi successivi.
  • 33. LA BASH SHELL I file di configurazione : La shell può usare cinque files di configurazione, ma spesso nelle varie distribuzioni non vengono usati tutti, d'altra parte vedremo che non è difficile crearsene di propri. I file sono: /etc/profile file globale /etc/bashrc file globale ~/.bash_profile file locale ~/.bashrc file locale ~/.bash_logout file locale
  • 34. LA BASH SHELL N.B. File globali contengono direttive di configurazione valide per tutti gli utenti mentre file locali, contengono direttive di configurazione valide solo per l'utente che possiede la cartella nella directory /home che li contiene.
  • 35. LA BASH SHELL Esiste inoltre esiste una directory /etc/skel (abbreviazione di skeleton) dove è possibile inserire un files .bashrc .bash_logout .bash_profile che saranno inseriti nella home directory dei nuovi utenti e che rappresenteranno la base per la loro configurazione e personalizzazione dell'ambiente di lavoro.
  • 36. LA BASH SHELL /etc/profile E' il file di configurazione globale che determina le variabili di ambiente e i programmi da eseguire per ogni utente che manda in esecuzione la shell. Per fare un paragone con il mondo Dos potrebbe essere qualcosa di molto simile al file autoexec.bat.
  • 37. LA BASH SHELL /etc/bashrc E' un file di configurazione globale molto simile al precedente, per questo motivo spesso non e' usato, contiene alias (collegamenti brevi a comandi molto lunghi), e pezzi di codice nel linguaggio di scripting della shell che devono essere eseguiti alla partenza della shell. Tutto può essere spostato senza problema nel file /etc/profile.
  • 38. LA BASH SHELL ~/.bash_profile E' un file di configurazione locale che contiene direttive di configurazione e variabili di ambiente specifiche dell'utente al quale appartiene la directory /home in cui si trova. Il file viene letto ed eseguito successivamente a quelli globali e modifica o sovrascrive variabili che riguardano esclusivamente l'utente.
  • 39. LA BASH SHELL ~/.bashrc E' un file di configurazione locale che contiene direttive di configurazione come gli alias, o funzioni definite dall'utente. Il file viene letto ed eseguito successivamente a quelli globali, gli alias o le funzioni saranno specifici dell'utente e non influenzeranno nessun altro utente. E' il corrispondente locale di /etc/bashrc.
  • 40. LA BASH SHELL ~/.bash_logout E' un file di configurazione locale che contiene comandi da eseguire quando l'utente esce dalla shell. I comandi influenzano solo l'utente che possiede la cartella /home nella quale si trova.
  • 41. LA BASH SHELL VEDIAMO ORA LA STRUTTURA E IL LANCIO DI UNA PROCEDURA BASH N.B. Questo concetto verrà poi espanso ulteriormente nel corso delle lezioni
  • 42. LA BASH SHELL ● La procedura BASH è anche chiamata “script”, perché si tratta sempre di un file di testo. ● All'interno i commenti iniziano con il carattere # ● La struttura di uno “script” è molto semplice: ha 2 sole parti, di cui una è persino opzionale. Esse sono: – Il preambolo: è opzionale e ha la forma di una riga di commento. Definisce quale shell deve essere utilizzata per eseguire quel dato script.
  • 43. LA BASH SHELL – Il corpo dello script: è la parte che elenca i comandi elementari da eseguire, disposti su righe diverse o sulla medesima riga, eventualmente separati dal “;”. N.B. Vedi esempio di script “Hello World”
  • 44. LA BASH SHELL Per eseguire il semplice script appena mostrato la prima cosa da fare è renderlo eseguibile con il comando chmod +x nomefile Questo, perché ogni script è essenzialmente un file di testo, quindi il diritto di esecuzione è negato per default.
  • 45. LA BASH SHELL Si noti che deve essere dato il nome assoluto del comando, perché il direttorio in cui risiede non è necessariamente incluso nella variabile PATH. N.B. l'argomento verrà trattato meglio in seguito
  • 46. LA BASH SHELL Diamo uno sguardo a quello che succede quando una procedura viene eseguita.
  • 47. LA BASH SHELL La SHELL viene lanciata al Login dell'utente (schema iniziale SHELL), creando il relativo processo (ambiente di esecuzione). È la SHELL di base, che si occupa di lanciare altre SHELL per l'esecuzione dei comandi di utente. La si può definire Shell PADRE.
  • 48. LA BASH SHELL – Quando viene richiesta l'esecuzione di uno script, la SHELL PADRE crea una SHELL FIGLIO seguendo la direttiva contenuta nel preambolo. –La SHELL FIGLIO esegue il comando passatogli dalla SHELL PADRE
  • 49. LA BASH SHELL – Quando viene richiesta l'esecuzione di uno script, la SHELL PADRE crea una SHELL FIGLIO seguendo la direttiva contenuta nel preambolo. –La SHELL FIGLIO esegue il comando passatogli dalla SHELL PADRE (Es. con lo script Hello World, viene eseguito il comando echo sullo standard output la stringa e il parametro passatogli dalla SHELL PADRE)
  • 51. LA BASH SHELL [VARIABILI] Il metodo più usato per archiviare temporaneamente uno o più valori consiste nell'usare le variabili, cioè usare un'area di memoria del computer assegnandogli un nome a cui si possa far riferimento in seguito per recuperare il valore assegnato.
  • 52. LA BASH SHELL [VARIABILI] Bash considera le variabili come se fossero esclusivamente stringhe di caratteri. Per le operazioni numeriche sulle variabili è necessario usare il comando expr > a=2 > b=3 > expr $a + $b 5
  • 53. LA BASH SHELL [VARIABILI] Le variabili possono essere: ● Locali: proprie di un singolo ambiente utente ● Globali: proprie di tutti gli ambienti
  • 54. LA BASH SHELL [VARIABILI] Le variabili di ambiente sono quelle variabili create autonomamente dal sistema operativo e normalmente sono definite nel file '/etc/profile' , come per esempio SHELL, PS1, PS2 . Sono in definitiva quelle variabili proprie di ogni singolo processo in esecuzione.
  • 55. LA BASH SHELL [VARIABILI] Le variabili locali sono quelle variabili definite dall'utente e sono generalmente definite nel file ~/.bashrc che si trova nella /home dell'utente del quale possono influenzare l'ambiente. N.B. E' necessario un chiarimento!
  • 56. LA BASH SHELL [VARIABILI] La definizione di una variabile avviene in un modo intuitivo e elementare. Consta di tre parti: il nome della variabile seguito dall'operatore di assegnamento "=" e il valore da assegnare, cioè: 'nome_variabile=valore_variabile'
  • 57. LA BASH SHELL [VARIABILI] Una volta definita la variabile la possiamo rendere disponibile a tutti i programmi che l'utente usa con il comando export : 'export nome_variabile' N.B. Questo rende la variabile “Globale”
  • 58. LA BASH SHELL [VARIABILI] Per accedere al valore di una variabile cioè per recuperarne il valore dobbiamo far precedere al nome variabile il suffisso "$". Per esempio per conoscere il valore della variabile SHELL possiamo digitare il comando: 'echo $SHELL' Che informazione si avrà a video?
  • 59. LA BASH SHELL [PATH] La prima variabile da configurare è la variabile PATH che definisce le directory a cui possiamo accedere da qualsiasi punto del filesystem. Per esempio potremmo avere un programma nella directory '/bin' chiamato mio_prog, se la directory '/bin' è presente nella variabile PATH possiamo lanciare il programma da qualsiasi posizione nel filesystem, altrimenti saremmo costretti o a digitare l'intero percorso '/bin/mio_prog' oppure portarci nella directory digitando prima 'cd /bin' e successivamente './mio_prog'.
  • 60. LA BASH SHELL [PATH] l punto e la barra traversa (slash) che precedono il nome del programma dicono alla shell di cercare di eseguire quel file se ci sono i permessi adatti. La variabile PATH è definita in /etc/profile e ha una sintassi leggermente diversa dal normale; ogni percorso di directory alla destra dell'operatore di assegnazione "=" e separata dal carattere ":" ,esempio: PATH=/bin:/usr/bin:/usr/local/bin export PATH
  • 61. LA BASH SHELL [PATH] La variabile dell'esempio precedente rende possibile mandare in esecuzione da qualsiasi punto del filesystem tutti gli eseguibili che si trovano nelle cartelle dichiarate.
  • 62. LA BASH SHELL [PATH] Se noi volessimo aggiungere altri valori alla variabile PATH potremmo digitare semplicemente: PATH=$PATH:/home/test/bin export PATH che aggiungerà al valore già' esistente della variabile PATH il nostro nuovo valore, infatti il nome variabile preceduto dal simbolo "$" verrà espanso con il contenuto originale della variabile.
  • 63. LA BASH SHELL [PATH] Per fissare meglio le idee: /bin:/usr/bin:/usr/local/bin che diventerà /bin:/usr/bin:/usr/local/bin:/home/test/bin Si può modificare il proprio path inserendo il comando precedente in ~/.bash_profile.
  • 64. LA BASH SHELL [PROMPT] Il prompt non è altro che il sistema in attesa di input dall'utente, la sua forma varia da distribuzione a distribuzione e può avere una struttura simile a questa: nome_utente@nome_computer:[#,$,>] Che risulterebbe: root@localhost:#
  • 65. LA BASH SHELL [PROMPT] root@localhost:# Questo prompt può essere specialmente utile per le persone che accedono a varie macchine con account con nomi diversi, serve per ricordarsi sempre su quale pc stiamo lavorando e di quali privilegi disponiamo.
  • 66. LA BASH SHELL [PROMPT] E' possibile personalizzare le informazioni del prompt assegnando dei particolari valori alla variabile PS1 Questa variabile accetta dei valori predefiniti che sono ottenuti facendo seguire alla barra rovesciata (backslash) [Rif. Documento Elenco Variabili Interne e comandi]
  • 67. LA BASH SHELL [PROMPT] Utilizzando la bash, si può impostare il prompt cambiando il valore della variabile d'ambiente PS1, come segue: $ PS1="> " $ PS1="Il mio super prompt > " $ PS1="`uname -r` $ " $ PS1="u@H > " N.B. Verificare a terminale quali sono gli effetti di questi comandi.
  • 68. LA HISTORY DELLA BASH La shell e' in grado di ricordare i comandi immessi dall'utente che normalmente sono salvati nel file ~/.bash_history e possono essere richiamati premendo i tasti freccia in su' e freccia in giù, questo comportamento può essere modificato configurando le variabili: HISTSIZE HISTFILE HISTFILESIZE
  • 69. LA HISTORY DELLA BASH E' da ricordare che per abitudine le variabili di ambiente vengono indicate usando lettere maiuscole a differenza delle locali per cui si usano le minuscole. Queste variabili sono definite in /etc/profile ma possono essere sovrascritte in ~/.bash_profile.
  • 70. LA HISTORY DELLA BASH HISTSIZE Definisce il numero massimo dei comandi da memorizzare nel file storico normalmente il valore preimpostato è 500 o più comandi. HISTSIZE=10 Memorizza solo 10 comandi nella HISTORY
  • 71. LA HISTORY DELLA BASH HISTFILE Indica il file che deve essere usato per contenere i comandi digitati normalmente il valore preimpostato è ~/.bash_history, può anche non essere impostato, lo storico si limiterà alla sessione di lavoro corrente. HISTFILE=~/.storico_comandi Memorizza la HISTORY nel file .storico_comandi
  • 72. LA HISTORY DELLA BASH HISTFILESIZE Determina la grandezza fisica massima che può avere il file dello storico. HISTFILESIZE=1000 Vengono memorizzate 1000 righe di HISTORY HISTFILESIZE=0 Con questo parametro la History non viene memorizzata a fine sessione
  • 73. LA BASH SHELL [ALIAS] Gli alias si possono definire come comandi "accorciati". Se vogliamo chiamare un comando lungo in maniera più mnemonica possiamo assegnarlo ad un alias.
  • 74. LA BASH SHELL [ALIAS] Se per esempio volessimo evitare di digitare ogni volta il comando: ls -laF potremmo assegnarlo nel file /etc/bashrc oppure ~/.bashrc nel seguente modo: alias ls='ls -laF' Si possono definire quanti alias servono senza particolari limiti.
  • 75. FINE PRIMO GIORNO ● Domande? ● Esercizi e compiti da fare :)