BASH INTRO Bologna, 17-11-2011
BASH SCRIPTING• La shell è linterfaccia fra utente e sistema  operativo.• Lavete già usata per esempio quando  “aprite una...
Redirezione dellOutput• Provate il comando :echo 1234 / 21234 / 2• Se usiamo loperatore > possiamo scrivere  loutput in un...
Redirezione dellOutput• Se usiamo loperatore | possiamo scrivere  loutput come input di unaltro comandoecho 1234 / 2 | bc6...
Redirezione dellOutput• Loperatore >> aggiunge loutput ad un file esistenteecho 444 / 2 >> myfilebc < myfile617222• Lopera...
Il primo script• Possiamo ora creare il primo script :echo #!/bin/bash > myscriptecho   C=`expr $1 + $2`     >> myscriptec...
Il primo script• Una volta creato uno script diviene un vero e proprio nuovo  comando. Lespressione $(( op )) significa “i...
Variabili dambiente• In ambiente UNIX ogni processo nasce da unaltro ( il processo 0 è parte del  kernel, 1 è chiamato ini...
Variabili dambiente    Sono stringhe di caratteri che contengono informazioni che sono accessibili sia da script•    che d...
CICLI• Un esempio di ciclo:for x in uno due tre ;do echo $x; doneunoduetre• Alla variabile x sono stati assegnati i valori...
Esecuzione Condizionale• Vediamo ora di modificare il comando precedente per  agire solo su alcuni files.  Il metodo più s...
Programmazione Funzionale• Analisi dettagliata della riga:for x in $(ls $(pwd) | grep .cpp);do echo $x; doneIl comando pwd...
Esecuzione Condizionalefor x in $(pwd)/* ;do if [ "${x##*.}" = "cpp" ] ; then echo $x;     fi; done• X##*. significa “rimu...
Manipolazione di Stringhe• È un argomento vasto. Qualche esempio:stringZ=il.mio.file.cppecho ${stringZ#*.}    # rimuove la...
Altre forme di cicli• While è un ciclo che si ripete finché la condizione è valida  mentre until viene interrotto quando l...
Case• Case equivale allo switch del C:for x in $(pwd)/* ;docase "${x##*.}" incpp) echo file c++ $x;;pdf) echo file pdf $x ...
Funzioni• I parametri sono passati come da riga  comando e richiamati allo stesso modo può  essere un modo per aggiungere ...
Librerie• Possiamo scrivere una libreria di funzioni e includerla in uno  script tramite il comando source o loperatore “....
Giuseppe LeviDipartimento di Fisica www.giuseppelevi.it     www.unibo.it
Upcoming SlideShare
Loading in...5
×

Bash intro

2,752

Published on

Very simple lecture on bash scripting. In Italian

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,752
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
63
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Bash intro

  1. 1. BASH INTRO Bologna, 17-11-2011
  2. 2. BASH SCRIPTING• La shell è linterfaccia fra utente e sistema operativo.• Lavete già usata per esempio quando “aprite una finestra terminale” e digitate “ls”.• Esistono diverse shell ( Bourne, cshell, Korn ) la bash ( Bourne Again Shell) è nata come progetto GNU ed è una delle più diffuse in Linux.
  3. 3. Redirezione dellOutput• Provate il comando :echo 1234 / 21234 / 2• Se usiamo loperatore > possiamo scrivere loutput in un fileecho 1234 / 2 > mycalc• In questo caso non viene stampato nulla ma la stringa 1234 / 2 viene scritta nel file mycalc
  4. 4. Redirezione dellOutput• Se usiamo loperatore | possiamo scrivere loutput come input di unaltro comandoecho 1234 / 2 | bc617• Con loperatore < posso prendere il contenuto del file appena scritto e usarlo come input del comando bcbc < myfile617
  5. 5. Redirezione dellOutput• Loperatore >> aggiunge loutput ad un file esistenteecho 444 / 2 >> myfilebc < myfile617222• Loperatore ` op ` oppure $( op ) implica che loperazione op fra i due apici o parentesi deve essere calcolata prima di essere inviata in outputecho `echo 1234 /2 | bc` + 1 | bc618
  6. 6. Il primo script• Possiamo ora creare il primo script :echo #!/bin/bash > myscriptecho C=`expr $1 + $2` >> myscriptecho echo $C >> myscript• Per visualizzarlo:cat myscript• Prima di eseguirlo dobbiamo rendere il file myscript eseguibilechmod +x myscript./myscript 23 427
  7. 7. Il primo script• Una volta creato uno script diviene un vero e proprio nuovo comando. Lespressione $(( op )) significa “il valore numerico di” op.echo $(( $(./myscript 23 3 ) + 1))27echo $(( $(./myscript 22 4 ) + 1)) + 1 | bc28• Se volessimo usare myscript senza il suffisso ./ dovremmo metterlo in una delle directory elencate nella variabile dambiente PATHecho $PATH/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
  8. 8. Variabili dambiente• In ambiente UNIX ogni processo nasce da unaltro ( il processo 0 è parte del kernel, 1 è chiamato init ) e ogni processo il suo insieme di variabili dambiente ( shell ) che eredita dal processo che da cui è stato generato, può modificare e trasmettere ai processi che genera.• Quando “aprite una finestra terminale” lanciate un processo ( bash ) da cui potete lanciarne altri. Per visualizzare le variabili dambiente definite:printenv• Per definire o modificare una variabile dambiente e trasmetterla ai processi generati si usa il comando export.export PATH=$PATH:/il/mio/percorso/• Non è possibile per un processo modificare lambiente di chi lo ha generato.
  9. 9. Variabili dambiente Sono stringhe di caratteri che contengono informazioni che sono accessibili sia da script• che da programmi C.#include <stdio.h>#include <stdlib.h> // setenv è definita qui.int main(){char *myenvvar=getenv("PATH");printf("La variabile dambiente PATH è %sn", myenvvar);return 0;} Usando loperatore ${ myvar } si espande esplicitamente il contenuto di una variabile• dambiente in uno script. Nella riga seguente notate luso del ; per dividere più comandi.echo $PATH ; echo caratteriprima${PATH}caretteridopo ; echo $PATH:/mypath/. Per eliminare la definizione di una variabile dambiente usate il comando unset•unset PATH
  10. 10. CICLI• Un esempio di ciclo:for x in uno due tre ;do echo $x; doneunoduetre• Alla variabile x sono stati assegnati i valori uno due tre e stampati. Ma possiamo farlo anche col contenuto di una directory. O col risultato di un comandofor x in $PWD/* ;do echo $x; donefor x in $(pwd)/* ;do echo $x; done• Equivale ad un ls a questo punto potremmo applicare un comando ad ogni file in una directory. PWD è una variabile dambiente che contiene il path della directory corrente. Mentre $(pwd) significa “il risultato del comando pwd. * è lusuale sostituzione per dire * qualunque carattere e / il separatore delle directory.
  11. 11. Esecuzione Condizionale• Vediamo ora di modificare il comando precedente per agire solo su alcuni files. Il metodo più semplice:for x in $(ls $(pwd) | grep .cpp);do echo $x; done• In questo caso abbiamo usato il comando ls e il comando grep. Il secondo intercetta loutput del primo e manda in output solo le stringhe che contengono la sottostringa .cpp• Il metodo con confronto diretto notate le “ “ che servono in generale se si hanno stringhe con spazi:for x in $(pwd)/* ;do if [ "${x##*.}" = "cpp" ] ; thenecho $x; fi; done
  12. 12. Programmazione Funzionale• Analisi dettagliata della riga:for x in $(ls $(pwd) | grep .cpp);do echo $x; doneIl comando pwd produce un risultato che serve al comando ls perprodurre dati che vengono mandati tramite una pipe al comando grep. Lestringhe che risultano da questa operazione vengono assegnate a x eloperazione echo $x viene eseguita su queste.Questo modo di programmare ove un flusso di dati viene inviato da unafunzione ad unaltra e si possono combinare fra loro più funzioni èchiamato paradigma funzionale.Altri linguaggi usano altri paradigmi di programmazione.Per approfondire con un mio collega della Stanford University:http://www.youtube.com/playlist?list=PL9D558D49CA734A02Seguite ALMENO la sua prima lezione per avere unidea di che si parla.
  13. 13. Esecuzione Condizionalefor x in $(pwd)/* ;do if [ "${x##*.}" = "cpp" ] ; then echo $x; fi; done• X##*. significa “rimuovi la stringa più lunga prima di *. ovvero se cera un file chiamato tizio.caio.sempronio.cpp il risultato era cpp.• La condizione dellif è racchiusa fra [ ], la sintassi completa è:if [ condizione ]thenazioneelif [ condizione2 ]thenazione2...elseazioneXfi• Tutte le condizioni vengono verificate e se nessuna di queste è vera allora si attiva lelse con lazioneX
  14. 14. Manipolazione di Stringhe• È un argomento vasto. Qualche esempio:stringZ=il.mio.file.cppecho ${stringZ#*.} # rimuove la stringa più corta prima di *.mio.file.cppecho ${stringZ##*.} # rimuove la stringa più lunga prima di *.cppecho ${stringZ%.*} # rimuove la stringa più corta dopo .*il.mio.fileecho ${stringZ%%.*}il• Maggiori dettagli su:• http://tldp.org/LDP/abs/html/string-manipulation.html• Awk è un programma potentissimo per la manipolazione di stringhe. Un piccolissimo esempio:ls -l | awk /.cpp/ {print $5,$9}• Cerca fra le stinghe quelle che contengono .cpp ( che è una regular expression ) e stampa i campi 5 e 9 ( dimensione e nome )
  15. 15. Altre forme di cicli• While è un ciclo che si ripete finché la condizione è valida mentre until viene interrotto quando la condizione è valida:while [ condizione ]do istruzionidoneuntil [ condizione ]do istruzionidone
  16. 16. Case• Case equivale allo switch del C:for x in $(pwd)/* ;docase "${x##*.}" incpp) echo file c++ $x;;pdf) echo file pdf $x ;;*) echo non riconosciuto;;esac;done
  17. 17. Funzioni• I parametri sono passati come da riga comando e richiamati allo stesso modo può essere un modo per aggiungere comandi.myfunction(){for x in $1/* ;docase "${x##*.}" incpp) echo file c++ $x;;pdf) echo file pdf $x ;;*) echo non riconosciuto;;esac;done }
  18. 18. Librerie• Possiamo scrivere una libreria di funzioni e includerla in uno script tramite il comando source o loperatore “.” .• Se la funzione scritta precedentemente è stata scritta in un file chiamato libexample allora uno script può richiamarla#!/bin/bash. /il/percorso/completo/libexample# Oppure source /il/percorso/completo/libexamplemyfunction $PWD
  19. 19. Giuseppe LeviDipartimento di Fisica www.giuseppelevi.it www.unibo.it
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×