Shell: Parte 1¶
Cosa faremo oggi?¶

Creare un File¶
Per poter creare un file, è necessario disporre di un editor di testo, nel nostro caso usermo
nano
un editor utilizzabile da terminale
CREARE/APRIRE UN FILE:
nano nome_del_file.txt
Per poter salvare le mofiche appena effettuate premere Ctrl + S
, mentre per chiudere l’editro
premere Ctrl + X
PROVATE VOI
Create un file.txt e scriveteci un paio di righe:
nano file.txt
Ciao mi chiamo bla bla bla ...
Ctrl + S
Ctrl + X
Comando cat¶
Il comando cat
permette di visualizzare file testuali:
cat file.txt
PROVATE VOI
Ora provate a leggere il file che avete appena scritto.
Il comando cat
stampa a video il contenuto di un file, ma questo puo essere reindirizato su un altra sorgente
ad esempio un file:
cat prova.txt > nuova_prova.txt
il comando permette anche di concatenare piu file in un unico file:
nano prova1.txt
nano prova2.txt
cat prova1.txt prova2.txt > concat_prova_1_2.txt
Ora il file concat_prova_1_2.txt contiene la concatenazione dei file prova1 e prova2.
Wildcards¶
La shell esegue quella che si chiama wildcard expansion: ogni volta che
incontra l’asterisco *
lo sostituisce con la lista dei file/directory che
“fanno match”.
ESEMPIO. Se eseguo:
ls *
la shell sostituisce *
con la lista di tutti i file e le directory nella
directory attuale (perche’ tutti fanno match con *
). Invece:
ls informatica/*
sostituisce *
con la lista dei file in informatica
.
Supponendo che in informatica
ci siano solo tre file, chiamati test1
,
test2
e results
, il comando precedente sarebbe equivalente a:
ls informatica/test1 informatica/test2 informatica/results
Se avessi eseguito:
ls informatica/test*
la wildcard test*
avrebbe fatto match solo con test1
e test2
, ed
il comando sarebbe stato equivalente a:
ls informatica/test1 informatica/test2
Qui results
non fa match, quindi non viene incluso.
Le wildcard piu’ importanti sono:
wildcard | fa match con |
---|---|
akz |
il testo “akz ” |
* |
una stringa qualunque (anche vuota) |
? |
un carattere qualunque |
[akz] |
un carattere solo tra a , k e z |
[a-z] |
un carattere alfabetico qualunque |
[0-9] |
una cifra qualunque |
[!1b] |
un carattere qualunque che non sia 1 o b |
[!a-e] |
un carattere qualunque che non sia a , b , …, e |
Quando la shell incontra un comando dove uno (o piu’) degli argomenti contiene delle wildacrds, esegue la wildcard expansion: sostituisce all’argomento incriminato tutti i file che fanno match con la wildcard.
Warning
Le wildcards sono simili alle regex, ma non sono la stessa cosa:
- Le wildcards sono usate dalla shell per fare il match di percorsi.
- Le regex sono usate da
grep
per fare il match di righe di testo contenute in un file. - Le regole che determinano il match di wildcards e regex sono diverse.
Esempio. La wildcard:
le rose sono *se
fa match con:
le rose sono rosse
ma anche con:
le rose sono costose
e:
le rose sono grosse
ma non con:
i maneggi abitano in montagna
Le wildcard possono essere combinate, ad esempio:
test?[a-z][!0-9]
fa il match con tutti i percorsi che cominciano con test
, proseguono con
un carattere qualunque, poi con un carattere alfabetico ed infine con un
carattere non numerico.
Esempio. Un esempio piu’ realistico. Il comando:
cat data/dna-fasta/*.[12]
fa match con tutti i file nella directory data/dna-fasta
il cui filename
e’ composto di una-stringa-qualunque, seguita da un punto, seguito da 1
o
2
e nient’altro. Nel nostro caso i soli file a fare match sono:
data/dna-fasta/fasta.1
data/dna-fasta/fasta.2
Dopo la wildcard expansion il comando precedente diventa:
cat data/dna-fasta/fasta.1 data/dna-fasta/fasta.2
PROVATE VOI create le seguenti directory e sub-directory
- data
- data/deep1
- data/deep1/1
- data/deep2
- data/deep2/1
- data/deep3
- data/deep3/1
- data/deep4
- data/deep4/1
Stampare a schermo i contenuti della directory data:
ls data
Per stampare i contenuti delle directory che stanno in data:
ls data/*
Per stampare a schermo solo il contenuto delle directory deep0
, …, deep4
:
ls data/deep*
Mentre per restringere la wildcard alle directory deep0
e deep3
:
ls data/deep[03]
e solo per le directory deep0
, …, deep4
ma non deep2
:
ls data/deep[!2]
Esercizi 10 min¶
- Create 3 file usando l editor
nano
- Copiate i 3 file usando
cp
nel folder “prova” - create un quarto file chiamato concat.txt contenente la concatenzione dei 3 file creati
TRA 10 min invio le soluzioni nella chat