Shell: Parte 2 (Soluzioni)ΒΆ
- Soluzioni:
mkdir informatica
. Verifico che sia vuota conls informatica
.mkdir esercizi
.cd informatica
. Verifico conpwd
.mv ../esercizi ../esercizi-shell
. Verifico conls ..
.cp -r ../esercizi-shell .
. Verifico conls
.rm -r ../esercizi-shell
.echo 'esercitazioni di informatica' > esercizi-shell/README
. Verifico concat esercizi-shell/README
.echo 'Parte 1, introduzione alla shell' >> esercizi-shell/README
. Idem.cd
.
- Soluzioni:
mkdir original
, seguito daecho '*' > original/a
.Per comodita’, entro in
temp
concd temp
. Dopo ogni passaggio, faccio:cd .. rm -r temp cp -r original temp cd temp
Soluzioni:
cp a b; cp a c
. Verifico conls; cat b; cat c
.echo a
stampa la stringa “a
” a schermo;ls a
stampa il nome del filea
(che e’a
...);cat a
stampa il contenuto del filea
, cioe’ le due righe che abbiamo scritto prima.Nessuna.
mv a b
rinominaa
inb
.cp a b; rm aa
prima fa prima una copia dia
chiamatab
, poi rimuovea
.Nel primo caso mi ritrovo con tre copie di
a
, nel second con un solo file:c
.mv a z
rinominaa
inz
; quindiz
e’ un file.mkdir z; mv a z
prima crea una directoryz
, poi ci mette dentroa
.echo a z
stampa a schermo la stringaa z
.mkdir z; echo a z
fa la stessa cosa, ma crea anche una directory di nomez
.Cosi’:
echo qualcosa > a1 ... echo qualcosa > a10 rm a*
- Soluzioni:
- Da’ errore.
-e
non e’ un’opzione valida perls
. - Si pianta.
cat
si aspetta un file di input: noi non glielo diamo, e lui resta in attesa. Dato checat
e’ fermo, il resto della pipeline resta in attesa. Siamo costretti ad uccidere la pipeline conControl-c
. - Da’ errore.
.
e’ una directory,cat
si aspetta un file. - Stampa la stringa “
cat
” a schermo. (Non esegue il comandocat
...) - Stampa il contenuto del file
a
(se esiste), ma visto che lostdout
e’ rediretto, mette l’output dicat
nel fileb
. E’ equivalente acp a b
. - Da’ errore:
<<
non e’ un operatore di redirezione valido. - Non ha senso: stiamo cercando di redirigere lo
stdout
dihead
sia verso il filea
che, con la pipe|
, verso lostdin
ditail
. ls
mette ina
la lista dei file nella directory corrente; fin qui tutto ok. Mairm
non supporta la redirezione, si aspetta invece il nome di un file! Quindi finisce per dare errore.- Scrive il testo “
KrustyIlKlown
” nel filea
. - Il primo
tac
leggeFILE1
lo stampa a schermo rovesciato; pero’ la pipe ne redirige lostdout
al secondotac
: l’effetto complessivo e’ cheFILE1
viene stampato a schermo nel verso giusto. Infine, l’ultimo>
mette il contenuto diFILE1
inFILE2
. Il tutto e’ equivalente acp FILE1 FILE2
.
- Da’ errore.
- Soluzioni:
- Stampa le prime dieci righe di
a
inb
. - Idem.
- Idem.
- Stampa le ultime dieci righe di
a
inb
.
- Stampa le prime dieci righe di
- Soluzioni:
- Stampa
a
sottosopra, prende le prime venticinque righe, le mette inb
. Quindib
contiene le ultime venticinque righe dia
sottosopra. - Stampa
a
, prende le ultime venticinque righe, le mette inb
. Quindib
contiene ultime venticinque righe dia
ma non sottosopra.
- Stampa
- Soluzioni:
- Stampa le prime dieci righe di
a
. - Mette le prime dieci righe di
a
nel filetemp
, poi stampa le ultime dieci righe dia
.
- Stampa le prime dieci righe di
- Soluzioni:
- Stampa
file
e ne tiene solo le prime dieci righe. - Si pianta. Come sopra,
cat
si aspetta un file in input; non non glielo diamo e lui resta in attesa.
- Stampa
- Soluzioni:
- Stampo le prime n del file, di queste tengo solo l’ultima:
head -n n file | tail -n 1
. - Assumiamo che tot=n+m. Stampo le ultime tot righe del file, di queste tengo solo le ultime m:
head -n tot file | tail -n m
.
- Stampo le prime n del file, di queste tengo solo l’ultima:
- Soluzioni:
Eseguo:
head -n 50 data/a | tail -n 25 > data/b head -n 25 data/a >> data/b tail -n 50 data/a >> data/b
Come sopra, ma il secondo comando diventa:
head -n 25 data/a | tac >> data/b