Breve introduzione alla Bourne Again Shell (bash) Parte II ● Francesco Rossi – – – ● Per approfondire: – –
Ancora sulle pipes ● Un programma testuale prende come input del testo, lo trasforma e mostra il risultato della trasformazione. programma sort trucco bash CTRL+D bash trucco
Ancora sulle pipes ● La pipeline è un modo per far comunicare i programmi l'uno con l'altro. ● Ogni programma infatti riceve l'input di testo dal programma precedente nella pipeline e invia il proprio output come input del programma successivo. rev sort trucco bash CTRL+D occurt hsab occurt
Ancora sulle pipes ● Ai capi della pipeline di solito ci sono l'input da tastiera e l'output su schermo. ● Si può ridirezionare una pipeline in modo che i dati in ingresso siano presi da un file e/o vengano scritti, in uscita su un file.
Pipes con ingresso da file ● Create una lista di nomi in un file chiamato lista.txt, includendo dei duplicati. ● Vediamo come creare una pipe che prende le righe di ingresso dal file lista.txt: ∘ cat lista.txt | sort | uniq ● Viene creata una lista ordinata in ordine alfabetico con eliminazione di doppioni (uniq)
Parentesi: Jolly ● Una cosa interessante delle shell sono la lettura di REGEXP e wildcards (jolly) ● Tutte le volte che bash vede il carattere '*' in un comando, lo sostituisce con tutti i nomi di files possibili. ● Ad esempio a *.doc bash sostituisce tutti i file che finiscono con.doc (NB e che quindi vanno convertiti in un formato aperto). ● A slide* bash sostituisce tutti i nomi dei file che iniziano per 'slide'.
Parentesi: Jolly ● Di jolly se ne hanno a volontà. ● rm * # cancella tutti i file (no cartelle) ● rm *.jpg # cancella tutte le immagini jpg ● rm *cavolata* # cancella tutti i file che contengono 'cavolata' nel loro nome ● rm diploma* # cancella tutti i file che iniziano per diploma ● cat *interessante* # scrive tutti i file che contengono interessante nel nome ● ls -l *.txt # restituisce informazioni su tutti i file *.txt ● cp *.txt /home/redsh # copia tutti i file di.txt nella mia home
● Vediamo come creare una pipe che scrive l'output di un programma su un file ∘ cal > calendario.txt ∘ date >> calendario.txt ∘ cat calendario.txt #per visualizzare ● L'output di cal (calendario) viene scritto nel file calendario.txt, che viene innanzitutto svuotato. ● Nella seconda riga l'output di date, che mostra informazioni sull'ora corrente viene aggiunto come riga di testo al file già non-vuoto calendario.txt Pipes che scrivono su files
● Supponiamo di avere due liste separate listaA.txt, listaB.txt e di volerle unire. ● listaB.txt ha i nomi scritti al contrario e noi li vogliamo normali nella lista unione. ● Procediamo come segue: ∘ cat listaA.txt > lista.txt ∘ cat listaB.txt | rev >> lista.txt ∘ cat lista.txt | sort | uniq > listaFINE.txt Ancora sulle pipes
Un censuratore automatico ● sed (stream editor) è un programma che modifica le righe di testo che gli vengono messe da tastiera. ● un comando, tra i tanti utili di sed, è il comando per sostituire: ∘ sed -e 's/paroladacensurare/paroladasostit/g' ● per censurare (perchè altrimenti ci fanno causa per uso illecito di marchi registrati) il file articolo.txt: ● cat articolo.txt | sed -e 's/windows/microsoft (r)windows (r)/g' > articolo1.txt
Il bello della shell ● Se abbiamo delle serie di comandi che digitiamo spesso, possiamo salvare i comandi in un file di testo e dire alla shell di interpretare i comandi da quel file. ● Per farlo possiamo usare qualsiasi editor di testo come ad esempio kwrite o nano. ● Per motivi di riconoscimento è bene iniziare i files che contengono scripts (più-che-liste di comandi) con la parola magica (vedere man magic): #!/bin/bash
Un primo script ● Ad esempio supponiamo che vi serva un programmino che vi apre, in un colpo solo, konqueror, kmail, ksudoku e kopete in un colpo solo. ● Basterà scrivere in kwrite (le & servono a dire di non aspettare che konqueror esca prima di avviare kmail, provate a toglierle): #!/bin/bash konqueror & kmail & ksudoku & kopete &
● Salvato il file nella directory corrente (è comodo sul desktop) potete avviarlo renderlo eseguibile* con il comando : chmod +x nomefile #da i permessi di esecuzione a tutti ● e poi lo avviate* con source nomefile #non richiede il comando precedente ● oppure con./nomefile Il bello della shell * Potete farlo anche con Konqueror, vediamo chi fa prima
Programmi di esempio ● Scaricate* con wget (o con Konqueror, vediamo chi fa prima) ● ● cd && wget \ ● ● ed estraete l'archivio nella vostra home con*: ● tar -xf esempi.tar.gz ● cd esempi * Potete farlo anche con Konqueror, vediamo chi fa prima
Continua.. ● Adesso sapete tutto per scoprire cosa c'è nella cartella esempi, la lezione continua lì. ● Consiglio di inserire, prima di tutto, il comando ● source apri_in_kate ● che apre tutti gli esempi nel comodissimo editor kate (che integra una konsole, tra l'altro)