SlideShare a Scribd company logo
Linux in a Shell
Giuseppe Piccolo
Chi sono
● BSc Computer Science @ Uniba
● Software Developer @ ApuliaSoft
● Membro del Club degli Sviluppatori - Puglia
● *nix User :)
Outline
● La shell
● La shell in *nix
● Bash
● Caratteristiche di Bash
● Scripting con bash
La shell
“La shell (detta anche interprete dei comandi), in informatica, è la parte di un sistema
operativo che permette agli utenti di interagire con il sistema stesso, impartendo comandi e
richiedendo l'avvio di altri programmi. Insieme al kernel costituisce una delle componenti
principali di un sistema operativo. Il suo nome (dall'inglese shell, guscio) deriva dal fatto che
questa componente viene considerata l'involucro, la parte visibile del sistema ed è dunque
definibile come l'interfaccia utente o il programma software che la rende possibile.”
Wikipedia
GNU/Linux
● Linux è uno dei kernel adottati dal sistema operativo GNU.
● GNU/Linux è una distribuzione del sistema operativo GNU composta dal
kernel linux e dagli strumenti messi a supporto dello stesso, sviluppati dalla
Free Software Foundation (FSF)
● Il nome è tuttora oggetto di controversia
● Per comodità utilizzeremo Linux come alias di GNU/Linux
● Ad oggi sul mercato esistono centinaia di disrtibuzioni linux (ubuntu, debian,
redhat, ec…)
La shell nel mondo *nix - sh
Nel 1971 Ken Thompson rilascia la prima versione della Thompson shell (sh). Rispetto alle
shell moderne questa shell era piuttosto rudimentale: aveva il supporto alle pipe, alcune
strutture di controllo di base (come if/then e goto) ed le wildcard sui nomi dei file.
Ispirata alla shell del sistema operativo Multics basata sul modello RUNCOM (run command
- comando eseguibile).
Nei sistemi unix-like (come linux) molti file di configurazione terminano con suffisso rc in
memoria dell’antenato delle shell unix RUNCOM .
La shell nel mondo *nix - bourne shell
La Bourne shell è una riscrittura completa della shell originale sh ad opera di
Stephen Bourne. Distribuita per la prima volta nel 1979 con la versione 7 di UNIX,
di fatto sostituiva la shell originale di Thompson.
Questa versione portava numerose caratteristiche come:
● here document
● sostituzione dei comandi
● variabili d’ambiente
● strutture di controllo avanzate (es. loop)
La shell nel mondo *nix - La bourne shell (2)
Tradizionalmente la bourne shell si avvia attraverso il programma sh, sito nella
cartella /bin. Tuttavia oggi giorno sh non è nient’altro che un alias per una delle
sue numerose alternative.
La shell nel mondo *nix - La bourne shell (2)
● Almquist shell (ash)
● Bourne-Again shell (bash)
● Korn shell (ksh)
● Debian Almquist shell (dash)
● Public domain Korn shell (pdksh)
● MirBSD Korn shell (mksh)
● Z shell (zsh)
● Busybox
Bash
Bourne-Again shell è una shell scritta da Brian Fox nel contesto del progetto GNU
come alternativa free ed open source alla bourne shell. La sua prima versione
risale al 1989 e, al giorno d’oggi, è la shell di default di molte distribuzioni Linux e
di Mac OSX.
E’ disponibile anche per le piattaforme Microsoft Windows attraverso il tool
cgywin. A partire dalla versione Anniversary Update di Windows 10 la shell bash è
stata integrata in modo “nativo” nel sistema operativo.
Bash (2)
Spesso viene chiamata anche bourne shell dal nome dell’autore (Stephen Bourne)
della shell da cui è stata ispirata bash.
L'espansione dell'acronimo bash, Bourne again shell, letteralmente significa
un'altra shell Bourne, ma Bourne again ha la stessa pronuncia di born again, cioè
rinata creando la definizione finale shell rinata.
Bash (3)
Tecnicamente bash è un interprete di comandi che permette all’utente di
comunicare con il sistema operativo attraverso una serie di funzioni predefinite
(built in) o di eseguire programmi e script
Caratteristiche di bash
Redirezione
Bash è in grado di eseguire la redirezione dell’input e dell’output dei programmi
eseguiti su di essa in modo da eseguire più programmi in sequenza creando una
vera e propria pipeline software dove l’output del programma precedente diventa
l’input del programma successivo
Pipeline
Filtrare i file in una cartelle per estensione
ls | grep .png
Pipeline (2)
Redirezione su file
curl www.google.it > google.html
Brace expansion
La brace expansion è una caratteristica che permette di generare tutte le possibili
combinazioni tra una stringa ed un insieme di alternative.
$ echo a{p,c,d,b}e
ape ace ade abe
$ echo {a,b,c}{d,e,f}
ad ae af bd be bf cd ce cf
Brace expansion (2)
La brace expansion può essere utilizzata anche per esprimere sequenze
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo file{1..4}.txt
file1.txt file2.txt file3.txt file4.txt
$ echo {a..e}
a b c d e
$ echo {1..10..3}
1 4 7 10
$ echo {a..j..3}
a d g j
Gestione dei processi
La shell bash ha due modi con il quale esegue i programmi: batch mode
(sequenziale) e concurrent mode (concorrente)
Se digitiamo i comandi separati da un ;
command1; command2
stiamo eseguendo i comandi in modalità batch, ovvero l’esecuzione di command2
avverrà dopo l’esecuzione di command1 sia che esso fallisca o vada a buon fine
Gestione dei processi (2)
Se digitiamo
command1 &command2
stiamo eseguendo i comandi in modalità concorrente. command1 viene eseguito
in background ed il controllo della shell passa a command2 che viene eseguito in
foreground. E’ possibile sospendere command2 con ctrl+z.
Gestione dei processi (3)
Un programma sospeso può essere rievocato utilizzando il comando fg (se al
momento della sospensione si trovata in foreground) o bg (se si trovava in
background). L’id del processo in background è contenuto nella variabile $!
La shell può essere sincronizzata per attendere la fine di un job in background
utilizzando il comando wait, seguito dal process id (pid) del processo da
attendere. se non viene passato il pid, wait forza la shell ad attendere che tutti i
job in background terminino.
Esecuzione condizionale
In bash è possibile eseguire comandi sequenza in modo che l’esecuzione del
primo condizioni l’esecuzione del secondo. Ad esempio se digitiamo
command1 && command2
l’esecuzione di command2 avverrà se e solo se l’esecuzione di command1 va a
buon fine. Analogamente
command1 || command2
indica che l’esecuzione di command2 avviene se command1 fallisce.
Configurazione di bash
Alla partenza, bash tenta di caricare automaticamente una serie di file:
● se si tratta di una shell di login, bash tenta di caricare:
1. il file "/etc/profile"
2. solo il primo tra i file ".bash_profile", ".bash_login" e ".profile" collocati nella home directory
dell'utente e che risulti essere disponibile;
3. il file ".bashrc" collocato nella home directory dell'utente;
All'uscita di una shell interattiva di login, bash carica il file .bash_logout collocato nella home dell'utente
(se disponibile).
● se si tratta di una shell interattiva non di login, bash tenta di caricare il solo file ".bashrc" collocato
nella home directory dell'utente.
Configurazione di bash (2)
L'utente può modificare i file nella propria home directory per personalizzare il
proprio ambiente di lavoro.
Quando bash è avviata non interattivamente (ad esempio per eseguire uno script
di shell) essa controlla se esiste la variabile d'ambiente BASH_ENV o ENV ed in
caso positivo carica il file specificato dal valore della variabile (se bash è avviata
in modalità POSIX controlla solo ENV). Procede quindi ad eseguire il resto (script
o altro).
Scripting in bash
Scripting in Bash
Bash mette a disposizione un linguaggio di scripting piuttosto semplice, che
permette di svolgere compiti piuttosto complessi, astraendo la realizzazione
all’interno di script che possono diventare dei programmi eseguibili da bash,
avvalendosi del supporto di caratteristiche proprie dei linguaggi di
programmazione più evoluti come le strutture di controllo e le variabili.
Anatomia di uno script bash
Il seguente script permette di creare un archivio in "/tmp/my-backup.tar.gz" contenente l'intera propria
cartella personale (tenendo conto che "~" rappresenta "/home/proprionomeutente"):
Anatomia di uno script (2)
per rendere eseguibile lo script creato in precedenza è sufficiente assegnare al
file contenente lo script i permessi di esecuzione con il comando chmod
chmod +x nomefile
La $PATH in bash
tutti gli script eseguibili in bash possono essere eseguiti direttamente dalla riga di
comando (esattamente come le utility di base) a patto che essi siano eseguibili e
siano ubicati in uno dei percorsi indicati nella variabile d’ambiente $PATH
Le strutture condizionali
Il linguaggio di scripting di bash supporta le espressioni condizionali, ovvero
espressioni del tipo:
se <si verifica questa condizione> allora
<esegui queste istruzioni>
altrimenti
<esegui queste altre istruzioni>
Le strutture condizionali (2)
Nel linguaggio bash la sintassi per esprimere le strutture condizionali è la
seguente:
if expression; then
…
else
…
fi;
Le strutture condizionali - esempi
#!/bin/bash
if cmp file_a file_b &>/dev/null; then
echo "I File a e b sono identici."
else
echo "I File a e b sono diversi."
fi
Confronto tra due file
Le strutture condizionali - esempi (2)
#!/bin/bash
if [ -f $1 ]; then
echo "Il file $1 esiste."
else
echo "Il file $1 non esiste o non è un file"
fi
Controlla l’esistenza di un file
Le strutture di controllo - esempi (3)
#!/bin/bash
echo "Scrivi qualcosa e premi Invio:"
read linea
case "$linea" in
uno)
echo "Hai digitato 'uno'"
;;
*)
echo "Hai digitato qualcosa che non conosco"
;;
esac
I cicli
Bash supporta le strutture iterative, ovvero particolari strutture che consentono di
eseguire istruzioni comuni su collezioni di dati. Bash supporta tre tipi di cicli:
● for
● while
● until
I cicli - for
Il ciclo di tipo for differisce dal tipico ciclo for che ritroviamo negli altri linguaggi di
programmazione. In bash il form permette di iterare soltanto sulle stringhe
(collezione di caratteri)
for - esempio
#!/bin/bash
for i in $( ls ); do
echo item: $i
done
In questo esempio, stampiamo i contenuti della cartella in
cui ci troviamo.
La variabile i conterrà i vari valori rappresentanti i nomi dei
file contenuti nella cartella.
La parola chiave done indica la terminazione del blocco di
istruzioni del ciclo.
I cicli - while
Il ciclo while si comporta esattamente come negli altri linguaggi di
programmazione, ovvero esegue iterativamente un blocco di istruzioni fintantoché
la condizione specificata è rispettata
while - esempio
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
In questo esempio, viene stampato il
valore di COUNTER fintanto che esso
risulta essere minore o uguale di 10.
I cicli - until
Il ciclo until si comporta esattamente come negli altri linguaggi di
programmazione, ovvero esegue iterativamente un blocco di istruzioni fintantoché
la condizione specificata è rispettata. A livello semantico il suo funzionamento è
identico al ciclo while.
until - esempio
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
In questo esempio, viene stampato il
valore di COUNTER fintanto che esso
risulta essere minore o uguale di 10, con la
differenza che in questo caso COUNTER
viene inizializzato a 20, pertanto verranno
stampati i numeri al contrario
Altri comandi
Una trattazione esaustiva delle funzionalità e dei comandi di bash è disponibile al
seguente indirizzo
https://www.gnu.org/software/bash/manual/html_node/
un ulteriore aiuto è dato dall’help in linea, richiamabile attraverso il comando man.
Grazie per l’attenzione

More Related Content

What's hot

Bash Scripting
Bash ScriptingBash Scripting
Bash Scripting
Mariano Fiorentino
 
MontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSyncMontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSyncManuel Dalla Lana
 
Corso Bash
Corso BashCorso Bash
Corso Bash
Franco Tampieri
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
orestJump
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
alberto fiaschi
 
Lezione Tre
Lezione TreLezione Tre
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla PiazzaFabiano Dalla Piazza
 
Server linux samba in un dominio
Server linux samba in un dominioServer linux samba in un dominio
Server linux samba in un dominioSaverio Menin
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
NaLUG
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
Giorgio Cefaro
 
local::lib
local::liblocal::lib
local::lib
Flavio Poletti
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
Alessandro Selli
 
Gestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerGestione delle dipendenze con Composer
Gestione delle dipendenze con Composer
Massimiliano Arione
 
Anatomia di una distribuzione GNU/Linux
Anatomia di una distribuzione GNU/LinuxAnatomia di una distribuzione GNU/Linux
Anatomia di una distribuzione GNU/Linux
Paolo Sammicheli
 
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
 

What's hot (19)

Bash Scripting
Bash ScriptingBash Scripting
Bash Scripting
 
MontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSyncMontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSync
 
Corso Bash
Corso BashCorso Bash
Corso Bash
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
FANTIN BIG DATA (2)
FANTIN BIG DATA (2)FANTIN BIG DATA (2)
FANTIN BIG DATA (2)
 
Lezione Tre
Lezione TreLezione Tre
Lezione Tre
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla Piazza
 
Server linux samba in un dominio
Server linux samba in un dominioServer linux samba in un dominio
Server linux samba in un dominio
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
X2 Linux Riassunti
X2 Linux RiassuntiX2 Linux Riassunti
X2 Linux Riassunti
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
local::lib
local::liblocal::lib
local::lib
 
Il simulatore NS-2
Il simulatore NS-2Il simulatore NS-2
Il simulatore NS-2
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Gestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerGestione delle dipendenze con Composer
Gestione delle dipendenze con Composer
 
Anatomia di una distribuzione GNU/Linux
Anatomia di una distribuzione GNU/LinuxAnatomia di una distribuzione GNU/Linux
Anatomia di una distribuzione GNU/Linux
 
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
 

Viewers also liked

TMG Intro To Linux
TMG Intro To LinuxTMG Intro To Linux
TMG Intro To Linux
RichBos
 
Linux Intro
Linux   IntroLinux   Intro
Linux Intro
Lokesh Kumar N
 
Intro To Linux
Intro To LinuxIntro To Linux
Intro To Linux
techlug
 
Introduction to linux
Introduction to linuxIntroduction to linux
Introduction to linux
Kevin OBrien
 
Encryption basics
Encryption basicsEncryption basics
Encryption basics
Kevin OBrien
 
关于Linux的许多
关于Linux的许多关于Linux的许多
关于Linux的许多
Yun Teng
 
Linux shell env
Linux shell envLinux shell env
Linux shell env
Rahul Pola
 
Getting Started With Linux Administration
Getting Started With Linux AdministrationGetting Started With Linux Administration
Getting Started With Linux Administration
Edureka!
 
Scripting and the shell in LINUX
Scripting and the shell in LINUXScripting and the shell in LINUX
Scripting and the shell in LINUX
Bhushan Pawar -Java Trainer
 
Bash shell
Bash shellBash shell
Bash shell
xylas121
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
simha.dev.lin
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scripting
vceder
 
Linux intro 1 definitions
Linux intro 1  definitionsLinux intro 1  definitions
Linux intro 1 definitions
Giovanni Marco Dall'Olio
 
Shell Scripting in Linux
Shell Scripting in LinuxShell Scripting in Linux
Shell Scripting in Linux
Anu Chaudhry
 
Complete Guide for Linux shell programming
Complete Guide for Linux shell programmingComplete Guide for Linux shell programming
Complete Guide for Linux shell programming
sudhir singh yadav
 
Ubuntu – Linux Useful Commands
Ubuntu – Linux Useful CommandsUbuntu – Linux Useful Commands
Ubuntu – Linux Useful Commands
University of Technology
 
Unix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell ScriptUnix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell Script
sbmguys
 
An Introduction to Linux
An Introduction to LinuxAn Introduction to Linux
An Introduction to Linux
anandvaidya
 
Cryptography
CryptographyCryptography
Cryptography
Sidharth Mohapatra
 
Operating Systems: Linux in Detail
Operating Systems: Linux in DetailOperating Systems: Linux in Detail
Operating Systems: Linux in Detail
Damian T. Gordon
 

Viewers also liked (20)

TMG Intro To Linux
TMG Intro To LinuxTMG Intro To Linux
TMG Intro To Linux
 
Linux Intro
Linux   IntroLinux   Intro
Linux Intro
 
Intro To Linux
Intro To LinuxIntro To Linux
Intro To Linux
 
Introduction to linux
Introduction to linuxIntroduction to linux
Introduction to linux
 
Encryption basics
Encryption basicsEncryption basics
Encryption basics
 
关于Linux的许多
关于Linux的许多关于Linux的许多
关于Linux的许多
 
Linux shell env
Linux shell envLinux shell env
Linux shell env
 
Getting Started With Linux Administration
Getting Started With Linux AdministrationGetting Started With Linux Administration
Getting Started With Linux Administration
 
Scripting and the shell in LINUX
Scripting and the shell in LINUXScripting and the shell in LINUX
Scripting and the shell in LINUX
 
Bash shell
Bash shellBash shell
Bash shell
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scripting
 
Linux intro 1 definitions
Linux intro 1  definitionsLinux intro 1  definitions
Linux intro 1 definitions
 
Shell Scripting in Linux
Shell Scripting in LinuxShell Scripting in Linux
Shell Scripting in Linux
 
Complete Guide for Linux shell programming
Complete Guide for Linux shell programmingComplete Guide for Linux shell programming
Complete Guide for Linux shell programming
 
Ubuntu – Linux Useful Commands
Ubuntu – Linux Useful CommandsUbuntu – Linux Useful Commands
Ubuntu – Linux Useful Commands
 
Unix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell ScriptUnix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell Script
 
An Introduction to Linux
An Introduction to LinuxAn Introduction to Linux
An Introduction to Linux
 
Cryptography
CryptographyCryptography
Cryptography
 
Operating Systems: Linux in Detail
Operating Systems: Linux in DetailOperating Systems: Linux in Detail
Operating Systems: Linux in Detail
 

Similar to Linux day 2016 la shell in linux

Linux shell
Linux shellLinux shell
Linux shell
Marco Buttolo
 
Bash programming
Bash programmingBash programming
Bash programming
Sebastiano Merlino (eTr)
 
Lezione Quattro
Lezione QuattroLezione Quattro
Lezione Quattro
Sebastiano Merlino (eTr)
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione Quattro
Dario Mazza
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
Vincenzo Paolo Fraddosio
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
Matteo Collica
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione Tre
Dario Mazza
 
Battaglia Navale
Battaglia NavaleBattaglia Navale
Battaglia Navale
PaoloVanacore
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
Fulvio Corno
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
Vincenzo Paolo Fraddosio
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Paolo Campegiani
 
Sistema operativo Unix e Linux
Sistema operativo Unix e LinuxSistema operativo Unix e Linux
Sistema operativo Unix e LinuxGiulia Shkreli
 
La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari
 La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari
La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari
Fulvio Corno
 
Lug Roma3 Corso Linux Base
Lug Roma3   Corso Linux BaseLug Roma3   Corso Linux Base
Lug Roma3 Corso Linux Basefosk
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
Tiziano Serritella
 
Git best practices
Git best practicesGit best practices
Git best practices
Matteo Gavagnin
 
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
Marco Chiesi
 

Similar to Linux day 2016 la shell in linux (20)

Linux shell
Linux shellLinux shell
Linux shell
 
Bash programming
Bash programmingBash programming
Bash programming
 
Lezione Quattro
Lezione QuattroLezione Quattro
Lezione Quattro
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione Quattro
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
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
 
11 I File
11   I File11   I File
11 I File
 
Battaglia Navale
Battaglia NavaleBattaglia Navale
Battaglia Navale
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
 
Sistema operativo Unix e Linux
Sistema operativo Unix e LinuxSistema operativo Unix e Linux
Sistema operativo Unix e Linux
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari
 La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari
La shell Bash - Comandi base - Comandi avanzati - Espressioni regolari
 
Lug Roma3 Corso Linux Base
Lug Roma3   Corso Linux BaseLug Roma3   Corso Linux Base
Lug Roma3 Corso Linux Base
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Git best practices
Git best practicesGit best practices
Git best practices
 
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
 

Linux day 2016 la shell in linux

  • 1. Linux in a Shell Giuseppe Piccolo
  • 2. Chi sono ● BSc Computer Science @ Uniba ● Software Developer @ ApuliaSoft ● Membro del Club degli Sviluppatori - Puglia ● *nix User :)
  • 3. Outline ● La shell ● La shell in *nix ● Bash ● Caratteristiche di Bash ● Scripting con bash
  • 4. La shell “La shell (detta anche interprete dei comandi), in informatica, è la parte di un sistema operativo che permette agli utenti di interagire con il sistema stesso, impartendo comandi e richiedendo l'avvio di altri programmi. Insieme al kernel costituisce una delle componenti principali di un sistema operativo. Il suo nome (dall'inglese shell, guscio) deriva dal fatto che questa componente viene considerata l'involucro, la parte visibile del sistema ed è dunque definibile come l'interfaccia utente o il programma software che la rende possibile.” Wikipedia
  • 5. GNU/Linux ● Linux è uno dei kernel adottati dal sistema operativo GNU. ● GNU/Linux è una distribuzione del sistema operativo GNU composta dal kernel linux e dagli strumenti messi a supporto dello stesso, sviluppati dalla Free Software Foundation (FSF) ● Il nome è tuttora oggetto di controversia ● Per comodità utilizzeremo Linux come alias di GNU/Linux ● Ad oggi sul mercato esistono centinaia di disrtibuzioni linux (ubuntu, debian, redhat, ec…)
  • 6. La shell nel mondo *nix - sh Nel 1971 Ken Thompson rilascia la prima versione della Thompson shell (sh). Rispetto alle shell moderne questa shell era piuttosto rudimentale: aveva il supporto alle pipe, alcune strutture di controllo di base (come if/then e goto) ed le wildcard sui nomi dei file. Ispirata alla shell del sistema operativo Multics basata sul modello RUNCOM (run command - comando eseguibile). Nei sistemi unix-like (come linux) molti file di configurazione terminano con suffisso rc in memoria dell’antenato delle shell unix RUNCOM .
  • 7. La shell nel mondo *nix - bourne shell La Bourne shell è una riscrittura completa della shell originale sh ad opera di Stephen Bourne. Distribuita per la prima volta nel 1979 con la versione 7 di UNIX, di fatto sostituiva la shell originale di Thompson. Questa versione portava numerose caratteristiche come: ● here document ● sostituzione dei comandi ● variabili d’ambiente ● strutture di controllo avanzate (es. loop)
  • 8. La shell nel mondo *nix - La bourne shell (2) Tradizionalmente la bourne shell si avvia attraverso il programma sh, sito nella cartella /bin. Tuttavia oggi giorno sh non è nient’altro che un alias per una delle sue numerose alternative.
  • 9. La shell nel mondo *nix - La bourne shell (2) ● Almquist shell (ash) ● Bourne-Again shell (bash) ● Korn shell (ksh) ● Debian Almquist shell (dash) ● Public domain Korn shell (pdksh) ● MirBSD Korn shell (mksh) ● Z shell (zsh) ● Busybox
  • 10. Bash Bourne-Again shell è una shell scritta da Brian Fox nel contesto del progetto GNU come alternativa free ed open source alla bourne shell. La sua prima versione risale al 1989 e, al giorno d’oggi, è la shell di default di molte distribuzioni Linux e di Mac OSX. E’ disponibile anche per le piattaforme Microsoft Windows attraverso il tool cgywin. A partire dalla versione Anniversary Update di Windows 10 la shell bash è stata integrata in modo “nativo” nel sistema operativo.
  • 11. Bash (2) Spesso viene chiamata anche bourne shell dal nome dell’autore (Stephen Bourne) della shell da cui è stata ispirata bash. L'espansione dell'acronimo bash, Bourne again shell, letteralmente significa un'altra shell Bourne, ma Bourne again ha la stessa pronuncia di born again, cioè rinata creando la definizione finale shell rinata.
  • 12. Bash (3) Tecnicamente bash è un interprete di comandi che permette all’utente di comunicare con il sistema operativo attraverso una serie di funzioni predefinite (built in) o di eseguire programmi e script
  • 14. Redirezione Bash è in grado di eseguire la redirezione dell’input e dell’output dei programmi eseguiti su di essa in modo da eseguire più programmi in sequenza creando una vera e propria pipeline software dove l’output del programma precedente diventa l’input del programma successivo
  • 15. Pipeline Filtrare i file in una cartelle per estensione ls | grep .png
  • 16. Pipeline (2) Redirezione su file curl www.google.it > google.html
  • 17. Brace expansion La brace expansion è una caratteristica che permette di generare tutte le possibili combinazioni tra una stringa ed un insieme di alternative. $ echo a{p,c,d,b}e ape ace ade abe $ echo {a,b,c}{d,e,f} ad ae af bd be bf cd ce cf
  • 18. Brace expansion (2) La brace expansion può essere utilizzata anche per esprimere sequenze $ echo {1..10} 1 2 3 4 5 6 7 8 9 10 $ echo file{1..4}.txt file1.txt file2.txt file3.txt file4.txt $ echo {a..e} a b c d e $ echo {1..10..3} 1 4 7 10 $ echo {a..j..3} a d g j
  • 19. Gestione dei processi La shell bash ha due modi con il quale esegue i programmi: batch mode (sequenziale) e concurrent mode (concorrente) Se digitiamo i comandi separati da un ; command1; command2 stiamo eseguendo i comandi in modalità batch, ovvero l’esecuzione di command2 avverrà dopo l’esecuzione di command1 sia che esso fallisca o vada a buon fine
  • 20. Gestione dei processi (2) Se digitiamo command1 &command2 stiamo eseguendo i comandi in modalità concorrente. command1 viene eseguito in background ed il controllo della shell passa a command2 che viene eseguito in foreground. E’ possibile sospendere command2 con ctrl+z.
  • 21. Gestione dei processi (3) Un programma sospeso può essere rievocato utilizzando il comando fg (se al momento della sospensione si trovata in foreground) o bg (se si trovava in background). L’id del processo in background è contenuto nella variabile $! La shell può essere sincronizzata per attendere la fine di un job in background utilizzando il comando wait, seguito dal process id (pid) del processo da attendere. se non viene passato il pid, wait forza la shell ad attendere che tutti i job in background terminino.
  • 22. Esecuzione condizionale In bash è possibile eseguire comandi sequenza in modo che l’esecuzione del primo condizioni l’esecuzione del secondo. Ad esempio se digitiamo command1 && command2 l’esecuzione di command2 avverrà se e solo se l’esecuzione di command1 va a buon fine. Analogamente command1 || command2 indica che l’esecuzione di command2 avviene se command1 fallisce.
  • 23. Configurazione di bash Alla partenza, bash tenta di caricare automaticamente una serie di file: ● se si tratta di una shell di login, bash tenta di caricare: 1. il file "/etc/profile" 2. solo il primo tra i file ".bash_profile", ".bash_login" e ".profile" collocati nella home directory dell'utente e che risulti essere disponibile; 3. il file ".bashrc" collocato nella home directory dell'utente; All'uscita di una shell interattiva di login, bash carica il file .bash_logout collocato nella home dell'utente (se disponibile). ● se si tratta di una shell interattiva non di login, bash tenta di caricare il solo file ".bashrc" collocato nella home directory dell'utente.
  • 24. Configurazione di bash (2) L'utente può modificare i file nella propria home directory per personalizzare il proprio ambiente di lavoro. Quando bash è avviata non interattivamente (ad esempio per eseguire uno script di shell) essa controlla se esiste la variabile d'ambiente BASH_ENV o ENV ed in caso positivo carica il file specificato dal valore della variabile (se bash è avviata in modalità POSIX controlla solo ENV). Procede quindi ad eseguire il resto (script o altro).
  • 26. Scripting in Bash Bash mette a disposizione un linguaggio di scripting piuttosto semplice, che permette di svolgere compiti piuttosto complessi, astraendo la realizzazione all’interno di script che possono diventare dei programmi eseguibili da bash, avvalendosi del supporto di caratteristiche proprie dei linguaggi di programmazione più evoluti come le strutture di controllo e le variabili.
  • 27. Anatomia di uno script bash Il seguente script permette di creare un archivio in "/tmp/my-backup.tar.gz" contenente l'intera propria cartella personale (tenendo conto che "~" rappresenta "/home/proprionomeutente"):
  • 28. Anatomia di uno script (2) per rendere eseguibile lo script creato in precedenza è sufficiente assegnare al file contenente lo script i permessi di esecuzione con il comando chmod chmod +x nomefile
  • 29. La $PATH in bash tutti gli script eseguibili in bash possono essere eseguiti direttamente dalla riga di comando (esattamente come le utility di base) a patto che essi siano eseguibili e siano ubicati in uno dei percorsi indicati nella variabile d’ambiente $PATH
  • 30. Le strutture condizionali Il linguaggio di scripting di bash supporta le espressioni condizionali, ovvero espressioni del tipo: se <si verifica questa condizione> allora <esegui queste istruzioni> altrimenti <esegui queste altre istruzioni>
  • 31. Le strutture condizionali (2) Nel linguaggio bash la sintassi per esprimere le strutture condizionali è la seguente: if expression; then … else … fi;
  • 32. Le strutture condizionali - esempi #!/bin/bash if cmp file_a file_b &>/dev/null; then echo "I File a e b sono identici." else echo "I File a e b sono diversi." fi Confronto tra due file
  • 33. Le strutture condizionali - esempi (2) #!/bin/bash if [ -f $1 ]; then echo "Il file $1 esiste." else echo "Il file $1 non esiste o non è un file" fi Controlla l’esistenza di un file
  • 34. Le strutture di controllo - esempi (3) #!/bin/bash echo "Scrivi qualcosa e premi Invio:" read linea case "$linea" in uno) echo "Hai digitato 'uno'" ;; *) echo "Hai digitato qualcosa che non conosco" ;; esac
  • 35. I cicli Bash supporta le strutture iterative, ovvero particolari strutture che consentono di eseguire istruzioni comuni su collezioni di dati. Bash supporta tre tipi di cicli: ● for ● while ● until
  • 36. I cicli - for Il ciclo di tipo for differisce dal tipico ciclo for che ritroviamo negli altri linguaggi di programmazione. In bash il form permette di iterare soltanto sulle stringhe (collezione di caratteri)
  • 37. for - esempio #!/bin/bash for i in $( ls ); do echo item: $i done In questo esempio, stampiamo i contenuti della cartella in cui ci troviamo. La variabile i conterrà i vari valori rappresentanti i nomi dei file contenuti nella cartella. La parola chiave done indica la terminazione del blocco di istruzioni del ciclo.
  • 38. I cicli - while Il ciclo while si comporta esattamente come negli altri linguaggi di programmazione, ovvero esegue iterativamente un blocco di istruzioni fintantoché la condizione specificata è rispettata
  • 39. while - esempio #!/bin/bash COUNTER=0 while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done In questo esempio, viene stampato il valore di COUNTER fintanto che esso risulta essere minore o uguale di 10.
  • 40. I cicli - until Il ciclo until si comporta esattamente come negli altri linguaggi di programmazione, ovvero esegue iterativamente un blocco di istruzioni fintantoché la condizione specificata è rispettata. A livello semantico il suo funzionamento è identico al ciclo while.
  • 41. until - esempio #!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ]; do echo COUNTER $COUNTER let COUNTER-=1 done In questo esempio, viene stampato il valore di COUNTER fintanto che esso risulta essere minore o uguale di 10, con la differenza che in questo caso COUNTER viene inizializzato a 20, pertanto verranno stampati i numeri al contrario
  • 42. Altri comandi Una trattazione esaustiva delle funzionalità e dei comandi di bash è disponibile al seguente indirizzo https://www.gnu.org/software/bash/manual/html_node/ un ulteriore aiuto è dato dall’help in linea, richiamabile attraverso il comando man.