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
tempconcd 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 astampa la stringa “a” a schermo;ls astampa il nome del filea(che e’a...);cat astampa il contenuto del filea, cioe’ le due righe che abbiamo scritto prima.Nessuna.
mv a brinominaainb.cp a b; rm aaprima fa prima una copia diachiamatab, poi rimuovea.Nel primo caso mi ritrovo con tre copie di
a, nel second con un solo file:c.mv a zrinominaainz; quindize’ un file.mkdir z; mv a zprima crea una directoryz, poi ci mette dentroa.echo a zstampa a schermo la stringaa z.mkdir z; echo a zfa la stessa cosa, ma crea anche una directory di nomez.Cosi’:
echo qualcosa > a1 ... echo qualcosa > a10 rm a*
- Soluzioni:
 - Da’ errore. 
-enon e’ un’opzione valida perls. - Si pianta. 
catsi aspetta un file di input: noi non glielo diamo, e lui resta in attesa. Dato checate’ fermo, il resto della pipeline resta in attesa. Siamo costretti ad uccidere la pipeline conControl-c. - Da’ errore. 
.e’ una directory,catsi aspetta un file. - Stampa la stringa “
cat” a schermo. (Non esegue il comandocat...) - Stampa il contenuto del file 
a(se esiste), ma visto che lostdoute’ rediretto, mette l’output dicatnel fileb. E’ equivalente acp a b. - Da’ errore: 
<<non e’ un operatore di redirezione valido. - Non ha senso: stiamo cercando di redirigere lo 
stdoutdiheadsia verso il fileache, con la pipe|, verso lostdinditail. lsmette inala lista dei file nella directory corrente; fin qui tutto ok. Mairmnon supporta la redirezione, si aspetta invece il nome di un file! Quindi finisce per dare errore.- Scrive il testo “
KrustyIlKlown” nel filea. - Il primo 
tacleggeFILE1lo stampa a schermo rovesciato; pero’ la pipe ne redirige lostdoutal secondotac: l’effetto complessivo e’ cheFILE1viene stampato a schermo nel verso giusto. Infine, l’ultimo>mette il contenuto diFILE1inFILE2. Il tutto e’ equivalente acp FILE1 FILE2. 
- Da’ errore. 
 
- Soluzioni:
 - Stampa le prime dieci righe di 
ainb. - Idem.
 - Idem.
 - Stampa le ultime dieci righe di 
ainb. 
- Stampa le prime dieci righe di 
 
- Soluzioni:
 - Stampa 
asottosopra, prende le prime venticinque righe, le mette inb. Quindibcontiene le ultime venticinque righe diasottosopra. - Stampa 
a, prende le ultime venticinque righe, le mette inb. Quindibcontiene ultime venticinque righe diama non sottosopra. 
- Stampa 
 
- Soluzioni:
 - Stampa le prime dieci righe di 
a. - Mette le prime dieci righe di 
anel filetemp, poi stampa le ultime dieci righe dia. 
- Stampa le prime dieci righe di 
 
- Soluzioni:
 - Stampa 
filee ne tiene solo le prime dieci righe. - Si pianta. Come sopra, 
catsi 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