SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
Seminario: Bash Programming




                                     Seminario: Bash Programming


                                             Sebastiano Merlino

                              Universit` degli Studi di Catania - Facolt` di Ingegneria
                                       a                                a


                                               17 Maggio 2010

1 / 17
Seminario: Bash Programming
   Scripting




Scripting

         In generale
         Un linguaggio di scripting ` un linguaggio di programmazione
                                      e
         interpretato destinato a compiti di automazione di sistema, piccole
         applicazioni o compiti lightweight.
         Generalmente si tratta di semplici programmi atti ad interagire con
         sistemi pi` complessi.
                    u
         I primi linguaggi di scripting nacquero dall’esigenza di automatizzare
         operazioni ripetitive come l’esecuzione di particolari programmi; essi
         trovarono, successivamente, spazio in vari altri ambiti ed attualmente si
         trovano molto diffusi anche nello sviluppo per il web.

         Bash Scripting
         Con tale termine ci si riferisce a quello che ` un linguaggio solitamente
                                                       e
         usato per l’automazione di processi ripetitivi sui sistemi operativi
         Unix-like.
2 / 17
Seminario: Bash Programming
   Esempi semplici




Esempi semplici
         Hello World
         #!/bin/bash
         echo Hello World
         Questo script ha solo due righe.
         La prima indica al sistema quale software usare per avviare lo script.
         La seconda ` l’azione eseguita dallo script che stamper` a video la scritta
                      e                                           a
         Hello World.
         Fornendo diritti di esecuzione allo script esso potr` essere eseguito
                                                             a
         tramite il comando ./nome script

         Script di backup
         #!/bin/bash
         tar -cZf /var/my-backup.tgz /home/me/
         Questo script serve a dimostrare come ogni comando possa essere
         eseguito su shell. In questo caso realizziamo facilmente un backup della
         home tramite la sua compressione all’interno di un file.
3 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
         Variabili



Le Variabili
           Come in qualunque altro linguaggio di programmazione, possiamo usare
           le variabili come contenitori pratici per i nostri dati. In questo particolare
           linguaggio, non esistono tipi per le variabili e non vi ` necessit` di
                                                                    e        a
           dichiararle prima di utilizzarle ma basta solo assegnarne il riferimento.

           Hello World - migliorato
           #!/bin/bash
           STR=Hello World
           echo STR

           Script di backup - migliorato
           #!/bin/bash
           OF=/var/my-backup-$(date +%Y%m%d).tgz
           tar -cZf $OF /home/me/
           In questo modo il nostro backup sara’ facilmente datato. Notate che il
           comando date viene eseguito e l’output ci viene ritornato.
4 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
         Variabili



Altre Variabili
           Variabili Built-in
           Sono variabili predefinite per ogni script e permettono di compiere
           svariate azioni tramite il nostro script.
                     $0: Nome dello script.
                     $1: Valore del primo parametro (similmente $2, $3, ecc...).
                     $#: Numero di parametri.
                     $* e $@: Tutti i parametri.
                     $-: Opzioni date alla shell.
                     $?: Exit status dell’ultimo comando.
                     $$: PID dello script.

           Variabili Locali
           Esse sono variabili proprie di un certo scope (blocco di codice come una
           funzione, un ciclo, ecc...); possono essere create usando il costrutto
           local.
5 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
         Caratteri Speciali



Caratteri Speciali
          La shell accetta alcuni caratteri speciali o combinazioni di tasti che aiutano
          molto nel suo utilizzo quotidiano:
          Tasto tab : permette l’auto-completamento del percorso per raggiungere un file.
          ‘‘ ~ ’’ (ottenibile da <Alt Gr + ` : indica la cartella home.
                                                ı>)
          ‘‘|’’ : detta anche pipe, connette fra loro due comandi passando in ingresso al
          secondo, l’uscita del primo.
          ‘‘cmd > file’’, ‘‘cmd >> file’’ : salvano i valori stampati dal comando cmd
          nel file indicato. Il primo riscrive totalmente il file (cancellando eventuali contenuti
          precedenti), il secondo accoda i nuovi contenuti ai vecchi.
          ‘‘cmd < file’’ : permette al comando cmd di prendere input da file.
          ‘‘cmd ; cmd’’ : permette di eseguire due comandi uno dopo l’altro.
          ‘‘()’’ : esegue i comandi contenuti all’interno e fornisce i risultati d’uscita insieme al
          termine del secondo.
          ‘‘&’’ : permette di mantenere il controllo della shell nonostante un programma sia in
          esecuzione tramite essa cos` da eseguire pi` programmi contemporaneamente.
                                       ı              u
          ‘‘ ` ’’ (ottenibile da <Alt Gr + ’ >) : detto anche backtick; ci` che ` contenuto fra
                                                                               o    e
          due backtick viene eseguito e se ne utilizzeranno i risultati di uscita.
          Virgolette doppie ‘‘’’ e virgolette singole ’ ’ : indentificano stringhe.
          ‘‘  ’’ : backslash; indica alla shell di ignorare il carattere appena successivo.
          ‘‘ !! ’’ : viene sostituito con l’ultimo comando in history.
6 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
         Operatori



Operatori
          Operatori di comparazione Stringhe
                     s1 = s2: verifica che s1 sia uguale a s2
                     s1 != s2: verifica che s1 sia diverso da s2
                     s1 =~ s2: s2 ` un’espressione regolare e confrontata con s1
                                  e
                     -n s1: verifica che la stringa s1 sia non nulla (almeno un carattere)
                     -z s1: verifica che la stringa s1 sia nulla

          Operatori Aritmetici
          Oltre agli operatori aritmetici (+, -, *, /, %) esistono vari operatori relazionali:
                     -lt (<): Verifica che il numero a sinistra sia minore di quello a destra
                     -gt (>): Verifica che il numero a sinistra sia maggiore di quello a destra
                     -le (<=): Verifica che il numero a sinistra sia minore o uguale di quello a destra
                     -ge (>=): Verifica che il numero a sinistra sia maggiore o uguale di quello a
                     destra
                     -eq (==): Verifica che il numero a sinistra sia uguale a quello a destra
                     -ne (! =): Verifica che il numero a sinistra sia diverso da quello a destra
7 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
         Operatori



Operatori


          Operatori su files
                     -r file: Verifica che il file sia leggibile
                     -w file: Verifica che il file sia scrivibile
                     -x file: Verifica che il file sia eseguibile
                     -f file: Verifica che il file sia ordinario (non un device file o una
                     cartella)
                     -s file: Verifica che il file abbia dimensione maggiore di 0
                     -d file: Verifica che il file sia una directory
                     -e file: Verifica che il file esista




8 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
         Comandi composti




                  (list): ci` che qui ` indicato con list, viene eseguito in una subshell e ci viene
                              o           e
                  restituito solo l’exit status di list.
                  {list; }: il comando viene eseguito nella shell corrente. Deve essere terminato
                  da un punto e virgola e le parentesi devono essere isolate mediante spazi.
                  ((expression)): l’epressione ` valutata secondo regole aritmetiche; se il valore
                                                  e
                  restituito dalla valutazione ` diverso da zero, il costrutto restituisce 0, altrimenti
                                               e
                  viene restituito 1. Equivale a let expression.
                  [[expression]]: ritorna il valore ottenuto tramite valutazione di un’espressione
                  condizionale.
                  ( expression ): ritorna il valore di expression; pu` essere usato per forzare la
                                                                     o
                  precedenza.
                  !    expression: ` true se expression ` false
                                   e                    e
                  expression1 && expression2: restituisce vero se e solo se tutte e due le
                  espressioni sono vere
                  expression1 || expression2: restituisce vero se anche una sola delle
                  espressioni ` vera.
                              e

                  Gli operatori && e || godono di corto circuito; nel caso di && la seconda
                  espressione viene valutata solo se la prima ` vera; invece per || la seconda
                                                              e
                  espressione viene valutata solo se la prima ` falsa.
                                                              e

9 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
      Operatori condizionali



Costrutto IF

          Assume la forma:
          if list; then list; [ elif list; then list; ] ...    [ else list; ] fi
          `
          E il pi` semplice costrutto condizionale ed esegue il blocco di codice
                 u
          dopo l’if solo nel caso in cui l’espressione valutata sia vera.
          #!/bin/bash
          if [ $1 -lt $2 ]; then
                echo Minore
          elif [ $1 -gt $2 ]; then
                echo Maggiore
          else
                echo Uguale
          fi
          Questo script previo passaggio di due numeri come parametri, valuta se
          quello a sinistra sia minore, uguale o maggiore di quello a destra.
10 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
      Operatori condizionali



Costrutto CASE

          Risulta utile spesso al fine di evitare enormi trafile di if-elif-else. Il tutto
          risulta, tramite questo costrutto, molto pi` compresso.
                                                     u
          case word in [ [(] pattern [ | pattern ] ...      )   list ;; ] ...   esac
          Il comando case confronta word con i pattern uno alla volta ed esegue il
          blocco corrispondente al primo pattern che fa match con la word.
           #!/bin/bash
          case $1 in
                  a) echo      a;;
                  b) echo      b;;
                  c) echo      c;;
                  *) echo      default;;
          esac

          Usando ;& invece che ;; viene eseguito anche il blocco che segue il
          simbolo.
          Usando ;;& invece che ;; viene valutata anche la condizione che segue il
          simbolo e se vera viene eseguito il blocco.
11 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
      Cicli



Costrutto FOR



          Sebbene il costrutto si chiami for esso rappresenta quello che tipicamente
          in informatica viene detto foreach; esso si occupa di iterare gli elementi di
          una sequenza.
           #!/bin/bash                                 #!/bin/bash
           for i in $( ls ); do                        for i in ` seq 1 10` do
                echo item: $i                               echo item: $i
           done                                        done
          Il primo itera su una lista di fle resistuita da ls e ne stampa il nome a
          video; il secondo, invece, simula un normale ciclo for (stile C) stampando
          i numeri da 1 a 10.




12 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
      Cicli



Costrutti WHILE e UNTIL



          Il costrutto while esegue un blocco di codice iterativamente finch´ si
                                                                              e
          mantiene vera la condizione di controllo; il costrutto until invece esegue il
          blocco finch´ la condizione di controllo ` falsa.
                       e                          e
          #!/bin/bash                                #!/bin/bash
          COUNTER=0                                  COUNTER=20
          while [ $COUNTER -lt 10 ]; do              until [ $COUNTER -lt 10 ]; do
              echo Contatore: $COUNTER                   echo Contatore: $COUNTER
              let COUNTER=COUNTER+1                      let COUNTER=COUNTER-1
          done                                       done
          Il primo mostrer` il valore del contatore per i valori da 0 a 9 ed il secondo
                           a
          per i valori da 20 a 11.




13 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
      Funzioni



Funzioni

          Come ogni altro linguaggio di programmazione, anche il linguaggio bash
          ha il suo costrutto per la creazione delle funzioni.
          Le funzioni risultano esterne rispetto al flusso di esecuzione. Ogni
          funzione creata pu` poi essere richiamata all’interno dello script come
                             o
          qualunque altro comando.
          #!/bin/bash
          function quit {
                                 All’inizio dello script sono dichiarate le funzioni
             exit                quit, h e f.
          }
          function h {
                                 Viene eseguita la funzione h che prende un
             echo $1             parametro in ingresso stampandolo a video.
          }
          function f {
                                 Successivamente viene eseguita la funzione f che
             local W = parola    dichiara al proprio interno la variabile W e la
             echo W
          }
                                 stampa a video. Infine viene chiamata la funzione
          h Hello                quit che termina il flusso tramite l’utilizzo della
          f
          quit
                                 parola chiave exit. L’ultima riga dello script,
          echo foo
                                 infatti, non viene eseguita.

14 / 17
Seminario: Bash Programming
   Elementi del Linguaggio
      Select e Menu



Costrutto SELECT
          Un tale costrutto permette di creare facilmente dei menu printati su
          schermo all’interno dei quali si associa un numero ad un valore che pu`
                                                                                o
          riferire un’azione.
          #!/bin/bash
          OPTIONS=Hello Quit
          select opt in $OPTIONS; do
                 if [ $opt = Quit ]; then
                        echo done
                        exit
                 elif [ $opt = Hello ]; then
                        echo Hello World
                 else
                        clear
                        echo bad option
                 fi
          done

          Il risultato ` un menu che permette la scelta fra le voci Hello e Quit ed
                       e
          esegue le azioni associate mediante costrutto if.
15 / 17
Seminario: Bash Programming
   Varie




Varie


           Lettura da tastiera
           Ci` che un utente scrive su tastiera pu` essere letto mediante il comando
             o                                     o
           read nomevar. Ritroveremo tutto il contenuto scritto dall’utente fino al
           primo ritorno a capo all’interno della variabile nomevar.

           Cattura dell’output
           Come abbiamo gi` visto gli apici ` permettono di eseguire i comandi
                              a
           che si trovano al loro interno.
           Mediante una sintassi del tipo var=` comando ` riusciamo a trovare
           all’interno della variabile var l’output del comando fra apici.




16 / 17
Seminario: Bash Programming
   Andare Oltre




Sei sicuro di voler usare Bash?
          Array
          Gli array si indicano con la classica notazione [ ]. Quindi
          nome array[indice]=valore indicher` che l’elemento dell’array indicato con
                                                   a
          indice assume il valore specificato. Gli array possono essere sparsi.

          Thread
          Possono essere lanciati comandi e processi in maniera asincrona tramite la
          sintassi coproc NAME command [redirections].

          Tool
                  source: lancia l’esecuzione di un’altro script.
                  sed e awk: utili per il parsing e il processamento di stringhe.

          Altro
          Molto altro lo potete trovare negli script associati alle slide che verranno
          presentati sul sito.

17 / 17

Mais conteúdo relacionado

Mais procurados

Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linuxalberto fiaschi
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogrammingMajong DevJfu
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1rik0
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazioneMajong DevJfu
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0rik0
 
Py t3 python-oggetti
Py t3 python-oggettiPy t3 python-oggetti
Py t3 python-oggettiMajong DevJfu
 
Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di StudioAlartzero
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowGiacomo Antonino Fazio
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowGiacomo Antonino Fazio
 

Mais procurados (20)

Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1
 
Bash intro
Bash introBash intro
Bash intro
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
Py t1 python-intro
Py t1 python-introPy t1 python-intro
Py t1 python-intro
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
Py t3 python-oggetti
Py t3 python-oggettiPy t3 python-oggetti
Py t3 python-oggetti
 
2008 python
2008 python2008 python
2008 python
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Py t2 python-moduli
Py t2 python-moduliPy t2 python-moduli
Py t2 python-moduli
 
Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di Studio
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 

Destaque

Formato de clase 2012 8th-9th advice&suggestion
Formato de clase 2012  8th-9th advice&suggestionFormato de clase 2012  8th-9th advice&suggestion
Formato de clase 2012 8th-9th advice&suggestionEvelin Peña
 
Formato de clase 2012 4th-5th future tense
Formato de clase 2012 4th-5th future tenseFormato de clase 2012 4th-5th future tense
Formato de clase 2012 4th-5th future tenseEvelin Peña
 
KnowQuestion :: Introduction to G-CHECKS
KnowQuestion :: Introduction to G-CHECKSKnowQuestion :: Introduction to G-CHECKS
KnowQuestion :: Introduction to G-CHECKSStephen Bounds
 
Galeria Rammstein Slides
Galeria Rammstein SlidesGaleria Rammstein Slides
Galeria Rammstein SlidesNATALIA LAVERDE
 
Formato plano 7h week7_compa_super
Formato plano 7h week7_compa_superFormato plano 7h week7_compa_super
Formato plano 7h week7_compa_superEvelin Peña
 
Multithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaMultithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaSebastiano Merlino (eTr)
 
knowquestion :: agile team management
knowquestion :: agile team managementknowquestion :: agile team management
knowquestion :: agile team managementStephen Bounds
 
Domingo De Ramos En La Noche
Domingo De Ramos En La NocheDomingo De Ramos En La Noche
Domingo De Ramos En La NocheClaudio Obregón
 
810 Presentation
810 Presentation810 Presentation
810 Presentationguest002103
 
我如何看待自己
我如何看待自己我如何看待自己
我如何看待自己Kenny Kuo
 
Formato plano 6th week4
Formato plano 6th week4Formato plano 6th week4
Formato plano 6th week4Evelin Peña
 
20100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險990121
20100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險99012120100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險990121
20100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險990121Kenny Kuo
 
Formato de clase 8y9 acronyms
Formato de clase 8y9 acronymsFormato de clase 8y9 acronyms
Formato de clase 8y9 acronymsEvelin Peña
 
Presentación de Servicios AG Sustentable
Presentación de Servicios AG SustentablePresentación de Servicios AG Sustentable
Presentación de Servicios AG Sustentabledavosconsultores
 

Destaque (20)

Presentazione Progetto CRio
Presentazione Progetto CRioPresentazione Progetto CRio
Presentazione Progetto CRio
 
Formato de clase 2012 8th-9th advice&suggestion
Formato de clase 2012  8th-9th advice&suggestionFormato de clase 2012  8th-9th advice&suggestion
Formato de clase 2012 8th-9th advice&suggestion
 
Formato de clase 2012 4th-5th future tense
Formato de clase 2012 4th-5th future tenseFormato de clase 2012 4th-5th future tense
Formato de clase 2012 4th-5th future tense
 
KnowQuestion :: Introduction to G-CHECKS
KnowQuestion :: Introduction to G-CHECKSKnowQuestion :: Introduction to G-CHECKS
KnowQuestion :: Introduction to G-CHECKS
 
Galeria Rammstein Slides
Galeria Rammstein SlidesGaleria Rammstein Slides
Galeria Rammstein Slides
 
Chair
ChairChair
Chair
 
How to build SOLID code
How to build SOLID codeHow to build SOLID code
How to build SOLID code
 
Formato plano 7h week7_compa_super
Formato plano 7h week7_compa_superFormato plano 7h week7_compa_super
Formato plano 7h week7_compa_super
 
Multithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaMultithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e Asincronia
 
knowquestion :: agile team management
knowquestion :: agile team managementknowquestion :: agile team management
knowquestion :: agile team management
 
Domingo De Ramos En La Noche
Domingo De Ramos En La NocheDomingo De Ramos En La Noche
Domingo De Ramos En La Noche
 
E Businesses
E BusinessesE Businesses
E Businesses
 
810 Presentation
810 Presentation810 Presentation
810 Presentation
 
我如何看待自己
我如何看待自己我如何看待自己
我如何看待自己
 
Medicina
MedicinaMedicina
Medicina
 
Formato plano 6th week4
Formato plano 6th week4Formato plano 6th week4
Formato plano 6th week4
 
20100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險990121
20100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險99012120100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險990121
20100122 3620 行銷簡報 富邦人壽澳利多外幣養老保險990121
 
Formato de clase 8y9 acronyms
Formato de clase 8y9 acronymsFormato de clase 8y9 acronyms
Formato de clase 8y9 acronyms
 
Presentación de Servicios AG Sustentable
Presentación de Servicios AG SustentablePresentación de Servicios AG Sustentable
Presentación de Servicios AG Sustentable
 
Time Management
Time ManagementTime Management
Time Management
 

Semelhante a Bash programming

Semelhante a Bash programming (20)

Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linux
 
Comandi bash
Comandi bashComandi bash
Comandi bash
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
#!/bin/bash ed esempi di scripting
#!/bin/bash ed esempi di scripting#!/bin/bash ed esempi di scripting
#!/bin/bash ed esempi di scripting
 
Lezione Tre
Lezione TreLezione Tre
Lezione Tre
 
Lezione Quattro
Lezione QuattroLezione Quattro
Lezione Quattro
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione Quattro
 
Shell unix
Shell unixShell unix
Shell unix
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
Corso Bash
Corso BashCorso Bash
Corso Bash
 
Dsl in Lisp e Java
Dsl in Lisp e JavaDsl in Lisp e Java
Dsl in Lisp e Java
 
Laboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamicaLaboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamica
 
Linux shell
Linux shellLinux shell
Linux shell
 
Linux shell
Linux shellLinux shell
Linux shell
 
Lezione1 Linguaggio C
Lezione1 Linguaggio CLezione1 Linguaggio C
Lezione1 Linguaggio C
 
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
 
Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...
Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...
Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 

Mais de Sebastiano Merlino (eTr) (20)

Asterisk
AsteriskAsterisk
Asterisk
 
Biomeccatronica
BiomeccatronicaBiomeccatronica
Biomeccatronica
 
Openid+Opensocial
Openid+OpensocialOpenid+Opensocial
Openid+Opensocial
 
Lezione Uno Pratica
Lezione Uno PraticaLezione Uno Pratica
Lezione Uno Pratica
 
Lezione Tre Pratica
Lezione Tre PraticaLezione Tre Pratica
Lezione Tre Pratica
 
Lezione tre
Lezione treLezione tre
Lezione tre
 
Lezione Due Pratica
Lezione Due PraticaLezione Due Pratica
Lezione Due Pratica
 
Lezione Cinque
Lezione CinqueLezione Cinque
Lezione Cinque
 
Lezione uno
Lezione unoLezione uno
Lezione uno
 
Lezione due
Lezione dueLezione due
Lezione due
 
Wsmo Restricted
Wsmo RestrictedWsmo Restricted
Wsmo Restricted
 
Sawsdl Restriced
Sawsdl RestricedSawsdl Restriced
Sawsdl Restriced
 
Owl Guide Resticted
Owl Guide RestictedOwl Guide Resticted
Owl Guide Resticted
 
Owl S Restricted
Owl S RestrictedOwl S Restricted
Owl S Restricted
 
Fast Wsdl Tutorial
Fast Wsdl TutorialFast Wsdl Tutorial
Fast Wsdl Tutorial
 
Linux & Open Source - Alternative Software
Linux & Open Source - Alternative SoftwareLinux & Open Source - Alternative Software
Linux & Open Source - Alternative Software
 
Linux & Open Source - Lezione 2 Supporto
Linux & Open Source - Lezione 2 SupportoLinux & Open Source - Lezione 2 Supporto
Linux & Open Source - Lezione 2 Supporto
 
Linux & Open Source - Lezione 2
Linux & Open Source - Lezione 2Linux & Open Source - Lezione 2
Linux & Open Source - Lezione 2
 
Linux & Open Source - Lezione 1 Supporto
Linux & Open Source - Lezione 1 SupportoLinux & Open Source - Lezione 1 Supporto
Linux & Open Source - Lezione 1 Supporto
 
Linux & Open Source - Lezione 1
Linux & Open Source - Lezione 1Linux & Open Source - Lezione 1
Linux & Open Source - Lezione 1
 

Bash programming

  • 1. Seminario: Bash Programming Seminario: Bash Programming Sebastiano Merlino Universit` degli Studi di Catania - Facolt` di Ingegneria a a 17 Maggio 2010 1 / 17
  • 2. Seminario: Bash Programming Scripting Scripting In generale Un linguaggio di scripting ` un linguaggio di programmazione e interpretato destinato a compiti di automazione di sistema, piccole applicazioni o compiti lightweight. Generalmente si tratta di semplici programmi atti ad interagire con sistemi pi` complessi. u I primi linguaggi di scripting nacquero dall’esigenza di automatizzare operazioni ripetitive come l’esecuzione di particolari programmi; essi trovarono, successivamente, spazio in vari altri ambiti ed attualmente si trovano molto diffusi anche nello sviluppo per il web. Bash Scripting Con tale termine ci si riferisce a quello che ` un linguaggio solitamente e usato per l’automazione di processi ripetitivi sui sistemi operativi Unix-like. 2 / 17
  • 3. Seminario: Bash Programming Esempi semplici Esempi semplici Hello World #!/bin/bash echo Hello World Questo script ha solo due righe. La prima indica al sistema quale software usare per avviare lo script. La seconda ` l’azione eseguita dallo script che stamper` a video la scritta e a Hello World. Fornendo diritti di esecuzione allo script esso potr` essere eseguito a tramite il comando ./nome script Script di backup #!/bin/bash tar -cZf /var/my-backup.tgz /home/me/ Questo script serve a dimostrare come ogni comando possa essere eseguito su shell. In questo caso realizziamo facilmente un backup della home tramite la sua compressione all’interno di un file. 3 / 17
  • 4. Seminario: Bash Programming Elementi del Linguaggio Variabili Le Variabili Come in qualunque altro linguaggio di programmazione, possiamo usare le variabili come contenitori pratici per i nostri dati. In questo particolare linguaggio, non esistono tipi per le variabili e non vi ` necessit` di e a dichiararle prima di utilizzarle ma basta solo assegnarne il riferimento. Hello World - migliorato #!/bin/bash STR=Hello World echo STR Script di backup - migliorato #!/bin/bash OF=/var/my-backup-$(date +%Y%m%d).tgz tar -cZf $OF /home/me/ In questo modo il nostro backup sara’ facilmente datato. Notate che il comando date viene eseguito e l’output ci viene ritornato. 4 / 17
  • 5. Seminario: Bash Programming Elementi del Linguaggio Variabili Altre Variabili Variabili Built-in Sono variabili predefinite per ogni script e permettono di compiere svariate azioni tramite il nostro script. $0: Nome dello script. $1: Valore del primo parametro (similmente $2, $3, ecc...). $#: Numero di parametri. $* e $@: Tutti i parametri. $-: Opzioni date alla shell. $?: Exit status dell’ultimo comando. $$: PID dello script. Variabili Locali Esse sono variabili proprie di un certo scope (blocco di codice come una funzione, un ciclo, ecc...); possono essere create usando il costrutto local. 5 / 17
  • 6. Seminario: Bash Programming Elementi del Linguaggio Caratteri Speciali Caratteri Speciali La shell accetta alcuni caratteri speciali o combinazioni di tasti che aiutano molto nel suo utilizzo quotidiano: Tasto tab : permette l’auto-completamento del percorso per raggiungere un file. ‘‘ ~ ’’ (ottenibile da <Alt Gr + ` : indica la cartella home. ı>) ‘‘|’’ : detta anche pipe, connette fra loro due comandi passando in ingresso al secondo, l’uscita del primo. ‘‘cmd > file’’, ‘‘cmd >> file’’ : salvano i valori stampati dal comando cmd nel file indicato. Il primo riscrive totalmente il file (cancellando eventuali contenuti precedenti), il secondo accoda i nuovi contenuti ai vecchi. ‘‘cmd < file’’ : permette al comando cmd di prendere input da file. ‘‘cmd ; cmd’’ : permette di eseguire due comandi uno dopo l’altro. ‘‘()’’ : esegue i comandi contenuti all’interno e fornisce i risultati d’uscita insieme al termine del secondo. ‘‘&’’ : permette di mantenere il controllo della shell nonostante un programma sia in esecuzione tramite essa cos` da eseguire pi` programmi contemporaneamente. ı u ‘‘ ` ’’ (ottenibile da <Alt Gr + ’ >) : detto anche backtick; ci` che ` contenuto fra o e due backtick viene eseguito e se ne utilizzeranno i risultati di uscita. Virgolette doppie ‘‘’’ e virgolette singole ’ ’ : indentificano stringhe. ‘‘ ’’ : backslash; indica alla shell di ignorare il carattere appena successivo. ‘‘ !! ’’ : viene sostituito con l’ultimo comando in history. 6 / 17
  • 7. Seminario: Bash Programming Elementi del Linguaggio Operatori Operatori Operatori di comparazione Stringhe s1 = s2: verifica che s1 sia uguale a s2 s1 != s2: verifica che s1 sia diverso da s2 s1 =~ s2: s2 ` un’espressione regolare e confrontata con s1 e -n s1: verifica che la stringa s1 sia non nulla (almeno un carattere) -z s1: verifica che la stringa s1 sia nulla Operatori Aritmetici Oltre agli operatori aritmetici (+, -, *, /, %) esistono vari operatori relazionali: -lt (<): Verifica che il numero a sinistra sia minore di quello a destra -gt (>): Verifica che il numero a sinistra sia maggiore di quello a destra -le (<=): Verifica che il numero a sinistra sia minore o uguale di quello a destra -ge (>=): Verifica che il numero a sinistra sia maggiore o uguale di quello a destra -eq (==): Verifica che il numero a sinistra sia uguale a quello a destra -ne (! =): Verifica che il numero a sinistra sia diverso da quello a destra 7 / 17
  • 8. Seminario: Bash Programming Elementi del Linguaggio Operatori Operatori Operatori su files -r file: Verifica che il file sia leggibile -w file: Verifica che il file sia scrivibile -x file: Verifica che il file sia eseguibile -f file: Verifica che il file sia ordinario (non un device file o una cartella) -s file: Verifica che il file abbia dimensione maggiore di 0 -d file: Verifica che il file sia una directory -e file: Verifica che il file esista 8 / 17
  • 9. Seminario: Bash Programming Elementi del Linguaggio Comandi composti (list): ci` che qui ` indicato con list, viene eseguito in una subshell e ci viene o e restituito solo l’exit status di list. {list; }: il comando viene eseguito nella shell corrente. Deve essere terminato da un punto e virgola e le parentesi devono essere isolate mediante spazi. ((expression)): l’epressione ` valutata secondo regole aritmetiche; se il valore e restituito dalla valutazione ` diverso da zero, il costrutto restituisce 0, altrimenti e viene restituito 1. Equivale a let expression. [[expression]]: ritorna il valore ottenuto tramite valutazione di un’espressione condizionale. ( expression ): ritorna il valore di expression; pu` essere usato per forzare la o precedenza. ! expression: ` true se expression ` false e e expression1 && expression2: restituisce vero se e solo se tutte e due le espressioni sono vere expression1 || expression2: restituisce vero se anche una sola delle espressioni ` vera. e Gli operatori && e || godono di corto circuito; nel caso di && la seconda espressione viene valutata solo se la prima ` vera; invece per || la seconda e espressione viene valutata solo se la prima ` falsa. e 9 / 17
  • 10. Seminario: Bash Programming Elementi del Linguaggio Operatori condizionali Costrutto IF Assume la forma: if list; then list; [ elif list; then list; ] ... [ else list; ] fi ` E il pi` semplice costrutto condizionale ed esegue il blocco di codice u dopo l’if solo nel caso in cui l’espressione valutata sia vera. #!/bin/bash if [ $1 -lt $2 ]; then echo Minore elif [ $1 -gt $2 ]; then echo Maggiore else echo Uguale fi Questo script previo passaggio di due numeri come parametri, valuta se quello a sinistra sia minore, uguale o maggiore di quello a destra. 10 / 17
  • 11. Seminario: Bash Programming Elementi del Linguaggio Operatori condizionali Costrutto CASE Risulta utile spesso al fine di evitare enormi trafile di if-elif-else. Il tutto risulta, tramite questo costrutto, molto pi` compresso. u case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac Il comando case confronta word con i pattern uno alla volta ed esegue il blocco corrispondente al primo pattern che fa match con la word. #!/bin/bash case $1 in a) echo a;; b) echo b;; c) echo c;; *) echo default;; esac Usando ;& invece che ;; viene eseguito anche il blocco che segue il simbolo. Usando ;;& invece che ;; viene valutata anche la condizione che segue il simbolo e se vera viene eseguito il blocco. 11 / 17
  • 12. Seminario: Bash Programming Elementi del Linguaggio Cicli Costrutto FOR Sebbene il costrutto si chiami for esso rappresenta quello che tipicamente in informatica viene detto foreach; esso si occupa di iterare gli elementi di una sequenza. #!/bin/bash #!/bin/bash for i in $( ls ); do for i in ` seq 1 10` do echo item: $i echo item: $i done done Il primo itera su una lista di fle resistuita da ls e ne stampa il nome a video; il secondo, invece, simula un normale ciclo for (stile C) stampando i numeri da 1 a 10. 12 / 17
  • 13. Seminario: Bash Programming Elementi del Linguaggio Cicli Costrutti WHILE e UNTIL Il costrutto while esegue un blocco di codice iterativamente finch´ si e mantiene vera la condizione di controllo; il costrutto until invece esegue il blocco finch´ la condizione di controllo ` falsa. e e #!/bin/bash #!/bin/bash COUNTER=0 COUNTER=20 while [ $COUNTER -lt 10 ]; do until [ $COUNTER -lt 10 ]; do echo Contatore: $COUNTER echo Contatore: $COUNTER let COUNTER=COUNTER+1 let COUNTER=COUNTER-1 done done Il primo mostrer` il valore del contatore per i valori da 0 a 9 ed il secondo a per i valori da 20 a 11. 13 / 17
  • 14. Seminario: Bash Programming Elementi del Linguaggio Funzioni Funzioni Come ogni altro linguaggio di programmazione, anche il linguaggio bash ha il suo costrutto per la creazione delle funzioni. Le funzioni risultano esterne rispetto al flusso di esecuzione. Ogni funzione creata pu` poi essere richiamata all’interno dello script come o qualunque altro comando. #!/bin/bash function quit { All’inizio dello script sono dichiarate le funzioni exit quit, h e f. } function h { Viene eseguita la funzione h che prende un echo $1 parametro in ingresso stampandolo a video. } function f { Successivamente viene eseguita la funzione f che local W = parola dichiara al proprio interno la variabile W e la echo W } stampa a video. Infine viene chiamata la funzione h Hello quit che termina il flusso tramite l’utilizzo della f quit parola chiave exit. L’ultima riga dello script, echo foo infatti, non viene eseguita. 14 / 17
  • 15. Seminario: Bash Programming Elementi del Linguaggio Select e Menu Costrutto SELECT Un tale costrutto permette di creare facilmente dei menu printati su schermo all’interno dei quali si associa un numero ad un valore che pu` o riferire un’azione. #!/bin/bash OPTIONS=Hello Quit select opt in $OPTIONS; do if [ $opt = Quit ]; then echo done exit elif [ $opt = Hello ]; then echo Hello World else clear echo bad option fi done Il risultato ` un menu che permette la scelta fra le voci Hello e Quit ed e esegue le azioni associate mediante costrutto if. 15 / 17
  • 16. Seminario: Bash Programming Varie Varie Lettura da tastiera Ci` che un utente scrive su tastiera pu` essere letto mediante il comando o o read nomevar. Ritroveremo tutto il contenuto scritto dall’utente fino al primo ritorno a capo all’interno della variabile nomevar. Cattura dell’output Come abbiamo gi` visto gli apici ` permettono di eseguire i comandi a che si trovano al loro interno. Mediante una sintassi del tipo var=` comando ` riusciamo a trovare all’interno della variabile var l’output del comando fra apici. 16 / 17
  • 17. Seminario: Bash Programming Andare Oltre Sei sicuro di voler usare Bash? Array Gli array si indicano con la classica notazione [ ]. Quindi nome array[indice]=valore indicher` che l’elemento dell’array indicato con a indice assume il valore specificato. Gli array possono essere sparsi. Thread Possono essere lanciati comandi e processi in maniera asincrona tramite la sintassi coproc NAME command [redirections]. Tool source: lancia l’esecuzione di un’altro script. sed e awk: utili per il parsing e il processamento di stringhe. Altro Molto altro lo potete trovare negli script associati alle slide che verranno presentati sul sito. 17 / 17