Seminario: Bash Programming




                                     Seminario: Bash Programming


                       ...
Seminario: Bash Programming
   Scripting




Scripting

         In generale
         Un linguaggio di scripting ` un ling...
Seminario: Bash Programming
   Esempi semplici




Esempi semplici
         Hello World
         #!/bin/bash
         echo...
Seminario: Bash Programming
   Elementi del Linguaggio
         Variabili



Le Variabili
           Come in qualunque alt...
Seminario: Bash Programming
   Elementi del Linguaggio
         Variabili



Altre Variabili
           Variabili Built-in...
Seminario: Bash Programming
   Elementi del Linguaggio
         Caratteri Speciali



Caratteri Speciali
          La shel...
Seminario: Bash Programming
   Elementi del Linguaggio
         Operatori



Operatori
          Operatori di comparazione...
Seminario: Bash Programming
   Elementi del Linguaggio
         Operatori



Operatori


          Operatori su files
     ...
Seminario: Bash Programming
   Elementi del Linguaggio
         Comandi composti




                  (list): ci` che qui...
Seminario: Bash Programming
   Elementi del Linguaggio
      Operatori condizionali



Costrutto IF

          Assume la f...
Seminario: Bash Programming
   Elementi del Linguaggio
      Operatori condizionali



Costrutto CASE

          Risulta u...
Seminario: Bash Programming
   Elementi del Linguaggio
      Cicli



Costrutto FOR



          Sebbene il costrutto si c...
Seminario: Bash Programming
   Elementi del Linguaggio
      Cicli



Costrutti WHILE e UNTIL



          Il costrutto wh...
Seminario: Bash Programming
   Elementi del Linguaggio
      Funzioni



Funzioni

          Come ogni altro linguaggio di...
Seminario: Bash Programming
   Elementi del Linguaggio
      Select e Menu



Costrutto SELECT
          Un tale costrutto...
Seminario: Bash Programming
   Varie




Varie


           Lettura da tastiera
           Ci` che un utente scrive su tas...
Seminario: Bash Programming
   Andare Oltre




Sei sicuro di voler usare Bash?
          Array
          Gli array si ind...
Upcoming SlideShare
Loading in …5
×

Bash programming

2,457
-1

Published on

Practical lesson about bash programming and shell scripting

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

  • Be the first to like this

No Downloads
Views
Total Views
2,457
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Bash programming

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  1. A particular slide catching your eye?

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

×