SlideShare a Scribd company logo
“… a strange language, shaped as much by history as by design” — Kernigham & Pike 
Percorso 5 
Bash script 
2
Il primo script 
Percorso 5 
Bash script 
3
Esecuzione 
Percorso 5 
Bash script 
4
Variabili 
# la variabile FOO è «locale» 
FOO=23 
# la variabile FOO è esportata negli ambienti #+ dei processi figli 
export FOO=10 
# rimuove l’ambiguità (se serve) 
echo ${FOO}BAR 
Percorso 5 
Bash script 
5
Variabili speciali 
$RANDOM 
–un numero casuale 
Percorso 5 
Bash script 
6
Variabili speciali 
$BASH 
$BASHPID 
$BASHOPTS 
$BASH_VERSION 
… 
–informazioni sulla bash 
Percorso 5 
Bash script 
7
Variabili speciali 
$USER 
$GROUPS 
–informazioni sull’utente 
Percorso 5 
Bash script 
8
$PATH 
•La shell cerca i comandi all’interno del $PATH 
•La cartella corrente «.» non fa parte del path 
–e non è prudente aggiungerla 
•È possibile aggiungere le proprie cartelle al $PATH 
–nel dubbio: aggiungere sempre alla fine 
Percorso 5 
Bash script 
9 
PATH=$PATH:$HOME/scripts 
echo $PATH
Argomenti e Variabili speciali 
$* 
$@ 
–gli argomenti dello script (tutti insieme) 
–$* è equivalente a $@ 
–"$*" non è equivalente a "$@" 
$# 
–numero di argomenti 
Percorso 5 
Bash script 
10
Argomenti 
$0 
–il nome dello script 
$1 … $n 
–il primo, …, n-esimo argomento dello script 
–è necessario usare ${10} se n ≥ 10 
shift 
–cancella $1 e sposta ogni ${n} in ${n-1} 
Percorso 5 
Bash script 
11
Il primo script (v2) 
Percorso 5 
Bash script 
12 
sha bang
Esercizio 
•Scrivere lo script «hello» che stampa a video il nome dell’utente 
•Creare la cartella etc nella home, aggiungerla al PATH, ed eseguire lo script 
Percorso 5 
Bash script 
13 
$ hello 
Ciao giovanni
Informazioni sul processo 
$$ 
–il PID corrente 
$UID / $GID 
–l’UID / il GID corrente 
Percorso 5 
Bash script 
14
Test 
$? 
–il valore di ritorno (exit code) dell’ultimo comando 
–Convenzione 
•zero: tutto ok 
•maggiore di zero: problemi 
Percorso 5 
Bash script 
15
Test 
•Il comando «test» valuta l’espressione specificata e ne restituisce il valore (0 per vero, 1 falso) 
•«[ expr ]» è equivalente a «test expr» 
–«[» è un comando builtin 
–ma esiste anche il file eseguibile /usr/bin/[ 
•Attenzione: «3 = 3» è un confronto fra parole, non numeri 
Percorso 5 
Bash script 
16
Controlli principali 
-f foo foo esiste ed è un file 
-d foo foo esiste ed è una cartella 
… 
Usare «man test» per l’elenco completo dei controlli 
Percorso 5 
Bash script 
17
Controlli principali 
s1 = s2 la stringa s1 è uguale a s2 
s1 != s2 la stringa s1 è diversa da s2 
Percorso 5 
Bash script 
18
Controlli principali 
n1 -eq n2 il numero n1 è uguale a n2 
n1 -ne n2 il numero n1 è diverso da n2 
n1 -ge n2 il numero n1 è maggiore o uguale a n2 
n1 -gt n2 il numero n1 è maggiore di n2 
n1 -le n2 il numero n1 è minore o uguale a n2 
n1 -lt n2 il numero n1 è minore di n2 
Percorso 5 
Bash script 
19
[ exp ] vs. [[ exp ]] 
•[[ exp ]] valuta l’espressione come [ exp ] 
•[[ … ]] è una keyword della shell, non è un comando (interno o esterno) 
–maggiore versatilità 
–test più potenti 
–non del tutto standard 
Percorso 5 
Bash script 
20
Esecuzione condizionale 
if espressione 
then 
lista comandi 
elif espressione 
lista comandi 
… 
elif espressione 
lista comandi 
else 
lista comandi 
fi 
Percorso 5 
Bash script 
21
Esecuzione condizionale 
Percorso 5 
Bash script 
22
Hacks 
•Il comando viene eseguito se expr è vera 
•Il comando viene eseguito se expr è falsa 
Percorso 5 
Bash script 
23 
expr && comando 
expr || comando
Esercizio 
•Scrivere uno script per controllare che tutti gli argomenti siano tutti file esistenti ed eseguibili 
•In caso negativo, stampare l’elenco dei parametri non corretti spigando le ragioni 
Percorso 5 
Bash script 
24 
$ ./script.sh foo script.sh bar.txt 
foo: file non trovato 
bar.txt: file non eseguibile
Alternative 
case parola in 
pat1) comandi ;; 
pat2) comandi ;; 
… 
*) comandi default ;; 
esac 
Percorso 5 
Bash script 
25
Alternative 
Percorso 5 
Bash script 
26
Espansione intera 
•L’espressione dentro (( … )) viene considerata una «espressione intera» e valutata di conseguenza 
•in (( … )) si possono usare: == != > >= < <= … 
Percorso 5 
Bash script 
27 
(( A = 12 + 45 )) 
B=$(( A + 5 )) 
if (( A >= 23 )); then 
echo YES 
fi
Costrutti iterativi 
while espressione 
do 
lista comandi 
done 
Percorso 5 
Bash script 
28 
until espressione 
do 
lista comandi 
done
Costrutti iterativi 
Percorso 5 
Bash script 
29
break/continue 
while espressione 
do 
lista comandi 
expr1 && break 
lista comandi 
expr2 || continue 
lista comandi 
done 
Percorso 5 
Bash script 
30
Costrutti iterativi 
for var in list 
do 
lista comandi 
done 
Percorso 5 
Bash script 
31
Costrutti iterativi 
Percorso 5 
Bash script 
32
printf 
•Per chi ha familiarità con il C, la bash mette a disposizione la printf 
•Può essere utilizzata per definire variabili 
Percorso 5 
Bash script 
33 
printf "Formattato: %3dn" 23 
printf -v FOO "Formattato: %3dn" 23
Command substitution 
•L’output di un comando può essere utilizzato come fosse una stringa (ad esempio assegnato ad una variabile) 
Percorso 5 
Bash script 
34 
DIR=$( ls / ) 
echo $DIR 
MSG=`echo "La vecchia Bourne shell"` 
echo $MSG
Esercizio 
•Scrivere lo script bar.sh che conta il numero di righe dei file passati come argomento e stampa una barra composta da hash ‘#’, una ogni 10 righe 
•Problemi 
–come contare le linee di un file ed assegnare il valore ad una variabile? 
Percorso 5 
Bash script 
35
Quoting 
•Il tasto racchiuso fra apici doppi viene visto come un singolo argomento, le variabili sono espanse 
•Il tasto racchiuso fra apici singoli viene visto come un singolo argomento, le variabili non sono espanse 
•Il tasto backslash «» (escape) cambia il significato del carattere che segue 
Percorso 5 
Bash script 
36
Quoting 
Percorso 5 
Bash script 
37
$* vs. $@ 
•Se non racchiusi fra doppi apici 
–equivalenti 
•Se racchiusi fra doppi apici 
•"$*" è espanso in una unica stringa 
•"$@" è espanso nei singoli argomenti 
•Suggerimento: usate sempre $@ 
•NB: ci sono altre differenze (vedi $IFS) 
Percorso 5 
Bash script 
38
$* vs. $@ 
Percorso 5 
Bash script 
39
$* vs. $@ 
Percorso 5 
Bash script 
40
Espansioni 
Percorso 5 
Bash script 
41
Esercizio 
•Scrivere lo script args.sh utilizzato negli esempi 
Percorso 5 
Bash script 
42
Valori di default delle variabili 
${VAR-valore} 
–usa valore se non definita 
${VAR:-valore} 
–# usa valore se non definita o vuota 
Percorso 5 
Bash script 
43
Valori di default delle variabili 
Percorso 5 
Bash script 
44
Default + Assegnazione 
${VAR=valore} 
–sostituisce ed espande se non definita 
${VAR:=valore} 
–sostituisce ed espande se non definita o vuota 
Percorso 5 
Bash script 
45
Valori alternativi delle variabili 
${VAR+valore} 
–usa valore se definita (anche se vuota) 
${VAR:+valore} 
–usa valore se definita e non vuota 
Percorso 5 
Bash script 
46
Valori alternativi delle variabili 
Percorso 5 
Bash script 
47
Messaggi di errore 
${VAR?messaggio} 
–mostra un messaggio di errore ed interrompe lo script (restituisce 1) se la variabile non è definita 
${VAR:?valore} 
–mostra un messaggio di errore ed interrompe lo script (restituisce 1) se la variabile non è definita o è vuota 
Percorso 5 
Bash script 
48
Pattern 
${var%PATTERN} 
–rimuove il più piccolo pattern dalla fine 
${var%%PATTERN} 
–rimuove il più lungo pattern dalla fine 
Percorso 5 
Bash script 
49
Pattern 
${var#PATTERN} 
–rimuove il più piccolo pattern dall’inizio 
${var##PATTERN} 
–rimuove il più lungo pattern dall’inizio 
Percorso 5 
Bash script 
50
Pattern 
${var//tro/sos} 
–sostituisce tutte le occorrenze di «tro» con «sos» 
Percorso 5 
Bash script 
51
Pattern 
${var:start[:num]} 
–restituisce una sottostringa 
Percorso 5 
Bash script 
52
Riferimento indiretto 
${!VAR} 
–il valore della variabile il cui nome è memorizza nella variabile VAR 
Percorso 5 
Bash script 
53
Array 
# inizializzazione 
ARRAY=(23 10) 
# elementi dell’ array 
ARRAY[0]=23 
ARRAY[1]=10 
echo ${ARRAY[1]} 
Percorso 5 
Bash script 
54
Array 
# array completo 
echo ${ARRAY[*]} 
echo ${ARRAY[@]} 
# numero elementi 
echo ${#ARRAY[@]} 
Percorso 5 
Bash script 
55
Array 
•Nessun indice è equivalente all’indice 0 
–$ARRAY equivale a ${ARRAY[0]} 
Percorso 5 
Bash script 
56
Array (* vs. @) 
Percorso 5 
Bash script 
57
Array (* vs. @) 
Percorso 5 
Bash script 
58
Percorso 5 
Bash script 
59
Input 
read var1 [… varN] 
–legge dallo stdin ed assegna le variabili 
–comando interno 
–alla prima variabile viene assegnata la prima parola, alla seconda la seconda, …, all’ultima il resto della riga 
Percorso 5 
Bash script 
60
Input 
read var1 [… varN] 
–è possibile usare la redirezione 
–read è un espressione vera se ha assegnato le variabili 
Percorso 5 
Bash script 
61 
Control+D
Lettura da file 
Percorso 5 
Bash script 
62
Esecuzione automatica 
~/.bash_profile 
–Eseguito dalla bash quando l’utente si collega alla macchina la prima volta (login) 
~/.profile 
–Eseguito dalla sh quando l’utente si collega alla macchina la prima volta (login) 
–Eseguito da bash solo se .bash_profile manca 
~/.bashrc 
–Eseguito quando l’utente apre un terminale 
Percorso 5 
Bash script 
63
Esercizio 
•Modificare .bash_profile e .bashrc facendo stampare due messaggi diversi 
•Fare in modo che .bash_profile esegua sempre anche .bashrc 
•Suggerimenti 
[[ -f .bashrc ]] && source .bashrc 
usare «bash -l» per lanciare una bash di login, «ps --forest» per verificare 
Percorso 5 
Bash script 
64
These slides are licensed under a Creative Commons 
Attribution Non Commercial Share Alike 4.0 International 
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ 
Versione in Italiano: 
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.it

More Related Content

What's hot

Gcc & Make
Gcc & MakeGcc & Make
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
NaLUG
 
Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHPextrategy
 
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
Giuseppe Piccolo
 

What's hot (6)

Comandi bash
Comandi bashComandi bash
Comandi bash
 
Gcc & Make
Gcc & MakeGcc & Make
Gcc & Make
 
Il simulatore NS-2
Il simulatore NS-2Il simulatore NS-2
Il simulatore NS-2
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
 
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
 

Viewers also liked

Una casa a misura di disabile: la domotica al servizio della persona
Una casa a misura di disabile: la domotica al servizio della personaUna casa a misura di disabile: la domotica al servizio della persona
Una casa a misura di disabile: la domotica al servizio della persona
Fulvio Corno
 
Tecnologie per la disabilità: presentazione del corso
Tecnologie per la disabilità: presentazione del corsoTecnologie per la disabilità: presentazione del corso
Tecnologie per la disabilità: presentazione del corso
Fulvio Corno
 
La domotica al servizio della persona
La domotica al servizio della personaLa domotica al servizio della persona
La domotica al servizio della persona
Fulvio Corno
 
Progetto FreeAble (Handimatica 2008)
Progetto FreeAble (Handimatica 2008)Progetto FreeAble (Handimatica 2008)
Progetto FreeAble (Handimatica 2008)
Fulvio Corno
 
Edifici intelligenti: innovazione tecnologica e convergenza degli impianti
Edifici intelligenti: innovazione tecnologica e convergenza degli impiantiEdifici intelligenti: innovazione tecnologica e convergenza degli impianti
Edifici intelligenti: innovazione tecnologica e convergenza degli impianti
Fulvio Corno
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
Fulvio Corno
 
RDF - Resource Description Framework and RDF Schema
RDF - Resource Description Framework and RDF SchemaRDF - Resource Description Framework and RDF Schema
RDF - Resource Description Framework and RDF Schema
Fulvio Corno
 
Multimedialità ed e-learning
 Multimedialità ed e-learning Multimedialità ed e-learning
Multimedialità ed e-learning
Fulvio Corno
 
Representing and visiting graphs
Representing and visiting graphsRepresenting and visiting graphs
Representing and visiting graphs
Fulvio Corno
 
La percezione sensoriale
La percezione sensorialeLa percezione sensoriale
La percezione sensoriale
Fulvio Corno
 
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Fulvio Corno
 
Riusabilità dei contenuti ditattici
 Riusabilità dei contenuti ditattici Riusabilità dei contenuti ditattici
Riusabilità dei contenuti ditattici
Fulvio Corno
 
Introduzione alla disabilità
Introduzione alla disabilitàIntroduzione alla disabilità
Introduzione alla disabilità
Fulvio Corno
 
Attivare facilmente il Prompt dei comandi in Code::Blocks
Attivare facilmente il Prompt dei comandi in Code::BlocksAttivare facilmente il Prompt dei comandi in Code::Blocks
Attivare facilmente il Prompt dei comandi in Code::Blocks
Fulvio Corno
 
Intelligenza ambientale applicata alla casa
Intelligenza ambientale applicata alla casaIntelligenza ambientale applicata alla casa
Intelligenza ambientale applicata alla casa
Fulvio Corno
 
Il Web Semantico applicato agli edifici intelligenti
Il Web Semantico applicato agli edifici intelligentiIl Web Semantico applicato agli edifici intelligenti
Il Web Semantico applicato agli edifici intelligenti
Fulvio Corno
 
Introduction to Servlets
Introduction to ServletsIntroduction to Servlets
Introduction to Servlets
Fulvio Corno
 

Viewers also liked (17)

Una casa a misura di disabile: la domotica al servizio della persona
Una casa a misura di disabile: la domotica al servizio della personaUna casa a misura di disabile: la domotica al servizio della persona
Una casa a misura di disabile: la domotica al servizio della persona
 
Tecnologie per la disabilità: presentazione del corso
Tecnologie per la disabilità: presentazione del corsoTecnologie per la disabilità: presentazione del corso
Tecnologie per la disabilità: presentazione del corso
 
La domotica al servizio della persona
La domotica al servizio della personaLa domotica al servizio della persona
La domotica al servizio della persona
 
Progetto FreeAble (Handimatica 2008)
Progetto FreeAble (Handimatica 2008)Progetto FreeAble (Handimatica 2008)
Progetto FreeAble (Handimatica 2008)
 
Edifici intelligenti: innovazione tecnologica e convergenza degli impianti
Edifici intelligenti: innovazione tecnologica e convergenza degli impiantiEdifici intelligenti: innovazione tecnologica e convergenza degli impianti
Edifici intelligenti: innovazione tecnologica e convergenza degli impianti
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
RDF - Resource Description Framework and RDF Schema
RDF - Resource Description Framework and RDF SchemaRDF - Resource Description Framework and RDF Schema
RDF - Resource Description Framework and RDF Schema
 
Multimedialità ed e-learning
 Multimedialità ed e-learning Multimedialità ed e-learning
Multimedialità ed e-learning
 
Representing and visiting graphs
Representing and visiting graphsRepresenting and visiting graphs
Representing and visiting graphs
 
La percezione sensoriale
La percezione sensorialeLa percezione sensoriale
La percezione sensoriale
 
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
 
Riusabilità dei contenuti ditattici
 Riusabilità dei contenuti ditattici Riusabilità dei contenuti ditattici
Riusabilità dei contenuti ditattici
 
Introduzione alla disabilità
Introduzione alla disabilitàIntroduzione alla disabilità
Introduzione alla disabilità
 
Attivare facilmente il Prompt dei comandi in Code::Blocks
Attivare facilmente il Prompt dei comandi in Code::BlocksAttivare facilmente il Prompt dei comandi in Code::Blocks
Attivare facilmente il Prompt dei comandi in Code::Blocks
 
Intelligenza ambientale applicata alla casa
Intelligenza ambientale applicata alla casaIntelligenza ambientale applicata alla casa
Intelligenza ambientale applicata alla casa
 
Il Web Semantico applicato agli edifici intelligenti
Il Web Semantico applicato agli edifici intelligentiIl Web Semantico applicato agli edifici intelligenti
Il Web Semantico applicato agli edifici intelligenti
 
Introduction to Servlets
Introduction to ServletsIntroduction to Servlets
Introduction to Servlets
 

Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)

  • 1.
  • 2. “… a strange language, shaped as much by history as by design” — Kernigham & Pike Percorso 5 Bash script 2
  • 3. Il primo script Percorso 5 Bash script 3
  • 4. Esecuzione Percorso 5 Bash script 4
  • 5. Variabili # la variabile FOO è «locale» FOO=23 # la variabile FOO è esportata negli ambienti #+ dei processi figli export FOO=10 # rimuove l’ambiguità (se serve) echo ${FOO}BAR Percorso 5 Bash script 5
  • 6. Variabili speciali $RANDOM –un numero casuale Percorso 5 Bash script 6
  • 7. Variabili speciali $BASH $BASHPID $BASHOPTS $BASH_VERSION … –informazioni sulla bash Percorso 5 Bash script 7
  • 8. Variabili speciali $USER $GROUPS –informazioni sull’utente Percorso 5 Bash script 8
  • 9. $PATH •La shell cerca i comandi all’interno del $PATH •La cartella corrente «.» non fa parte del path –e non è prudente aggiungerla •È possibile aggiungere le proprie cartelle al $PATH –nel dubbio: aggiungere sempre alla fine Percorso 5 Bash script 9 PATH=$PATH:$HOME/scripts echo $PATH
  • 10. Argomenti e Variabili speciali $* $@ –gli argomenti dello script (tutti insieme) –$* è equivalente a $@ –"$*" non è equivalente a "$@" $# –numero di argomenti Percorso 5 Bash script 10
  • 11. Argomenti $0 –il nome dello script $1 … $n –il primo, …, n-esimo argomento dello script –è necessario usare ${10} se n ≥ 10 shift –cancella $1 e sposta ogni ${n} in ${n-1} Percorso 5 Bash script 11
  • 12. Il primo script (v2) Percorso 5 Bash script 12 sha bang
  • 13. Esercizio •Scrivere lo script «hello» che stampa a video il nome dell’utente •Creare la cartella etc nella home, aggiungerla al PATH, ed eseguire lo script Percorso 5 Bash script 13 $ hello Ciao giovanni
  • 14. Informazioni sul processo $$ –il PID corrente $UID / $GID –l’UID / il GID corrente Percorso 5 Bash script 14
  • 15. Test $? –il valore di ritorno (exit code) dell’ultimo comando –Convenzione •zero: tutto ok •maggiore di zero: problemi Percorso 5 Bash script 15
  • 16. Test •Il comando «test» valuta l’espressione specificata e ne restituisce il valore (0 per vero, 1 falso) •«[ expr ]» è equivalente a «test expr» –«[» è un comando builtin –ma esiste anche il file eseguibile /usr/bin/[ •Attenzione: «3 = 3» è un confronto fra parole, non numeri Percorso 5 Bash script 16
  • 17. Controlli principali -f foo foo esiste ed è un file -d foo foo esiste ed è una cartella … Usare «man test» per l’elenco completo dei controlli Percorso 5 Bash script 17
  • 18. Controlli principali s1 = s2 la stringa s1 è uguale a s2 s1 != s2 la stringa s1 è diversa da s2 Percorso 5 Bash script 18
  • 19. Controlli principali n1 -eq n2 il numero n1 è uguale a n2 n1 -ne n2 il numero n1 è diverso da n2 n1 -ge n2 il numero n1 è maggiore o uguale a n2 n1 -gt n2 il numero n1 è maggiore di n2 n1 -le n2 il numero n1 è minore o uguale a n2 n1 -lt n2 il numero n1 è minore di n2 Percorso 5 Bash script 19
  • 20. [ exp ] vs. [[ exp ]] •[[ exp ]] valuta l’espressione come [ exp ] •[[ … ]] è una keyword della shell, non è un comando (interno o esterno) –maggiore versatilità –test più potenti –non del tutto standard Percorso 5 Bash script 20
  • 21. Esecuzione condizionale if espressione then lista comandi elif espressione lista comandi … elif espressione lista comandi else lista comandi fi Percorso 5 Bash script 21
  • 23. Hacks •Il comando viene eseguito se expr è vera •Il comando viene eseguito se expr è falsa Percorso 5 Bash script 23 expr && comando expr || comando
  • 24. Esercizio •Scrivere uno script per controllare che tutti gli argomenti siano tutti file esistenti ed eseguibili •In caso negativo, stampare l’elenco dei parametri non corretti spigando le ragioni Percorso 5 Bash script 24 $ ./script.sh foo script.sh bar.txt foo: file non trovato bar.txt: file non eseguibile
  • 25. Alternative case parola in pat1) comandi ;; pat2) comandi ;; … *) comandi default ;; esac Percorso 5 Bash script 25
  • 26. Alternative Percorso 5 Bash script 26
  • 27. Espansione intera •L’espressione dentro (( … )) viene considerata una «espressione intera» e valutata di conseguenza •in (( … )) si possono usare: == != > >= < <= … Percorso 5 Bash script 27 (( A = 12 + 45 )) B=$(( A + 5 )) if (( A >= 23 )); then echo YES fi
  • 28. Costrutti iterativi while espressione do lista comandi done Percorso 5 Bash script 28 until espressione do lista comandi done
  • 29. Costrutti iterativi Percorso 5 Bash script 29
  • 30. break/continue while espressione do lista comandi expr1 && break lista comandi expr2 || continue lista comandi done Percorso 5 Bash script 30
  • 31. Costrutti iterativi for var in list do lista comandi done Percorso 5 Bash script 31
  • 32. Costrutti iterativi Percorso 5 Bash script 32
  • 33. printf •Per chi ha familiarità con il C, la bash mette a disposizione la printf •Può essere utilizzata per definire variabili Percorso 5 Bash script 33 printf "Formattato: %3dn" 23 printf -v FOO "Formattato: %3dn" 23
  • 34. Command substitution •L’output di un comando può essere utilizzato come fosse una stringa (ad esempio assegnato ad una variabile) Percorso 5 Bash script 34 DIR=$( ls / ) echo $DIR MSG=`echo "La vecchia Bourne shell"` echo $MSG
  • 35. Esercizio •Scrivere lo script bar.sh che conta il numero di righe dei file passati come argomento e stampa una barra composta da hash ‘#’, una ogni 10 righe •Problemi –come contare le linee di un file ed assegnare il valore ad una variabile? Percorso 5 Bash script 35
  • 36. Quoting •Il tasto racchiuso fra apici doppi viene visto come un singolo argomento, le variabili sono espanse •Il tasto racchiuso fra apici singoli viene visto come un singolo argomento, le variabili non sono espanse •Il tasto backslash «» (escape) cambia il significato del carattere che segue Percorso 5 Bash script 36
  • 37. Quoting Percorso 5 Bash script 37
  • 38. $* vs. $@ •Se non racchiusi fra doppi apici –equivalenti •Se racchiusi fra doppi apici •"$*" è espanso in una unica stringa •"$@" è espanso nei singoli argomenti •Suggerimento: usate sempre $@ •NB: ci sono altre differenze (vedi $IFS) Percorso 5 Bash script 38
  • 39. $* vs. $@ Percorso 5 Bash script 39
  • 40. $* vs. $@ Percorso 5 Bash script 40
  • 41. Espansioni Percorso 5 Bash script 41
  • 42. Esercizio •Scrivere lo script args.sh utilizzato negli esempi Percorso 5 Bash script 42
  • 43. Valori di default delle variabili ${VAR-valore} –usa valore se non definita ${VAR:-valore} –# usa valore se non definita o vuota Percorso 5 Bash script 43
  • 44. Valori di default delle variabili Percorso 5 Bash script 44
  • 45. Default + Assegnazione ${VAR=valore} –sostituisce ed espande se non definita ${VAR:=valore} –sostituisce ed espande se non definita o vuota Percorso 5 Bash script 45
  • 46. Valori alternativi delle variabili ${VAR+valore} –usa valore se definita (anche se vuota) ${VAR:+valore} –usa valore se definita e non vuota Percorso 5 Bash script 46
  • 47. Valori alternativi delle variabili Percorso 5 Bash script 47
  • 48. Messaggi di errore ${VAR?messaggio} –mostra un messaggio di errore ed interrompe lo script (restituisce 1) se la variabile non è definita ${VAR:?valore} –mostra un messaggio di errore ed interrompe lo script (restituisce 1) se la variabile non è definita o è vuota Percorso 5 Bash script 48
  • 49. Pattern ${var%PATTERN} –rimuove il più piccolo pattern dalla fine ${var%%PATTERN} –rimuove il più lungo pattern dalla fine Percorso 5 Bash script 49
  • 50. Pattern ${var#PATTERN} –rimuove il più piccolo pattern dall’inizio ${var##PATTERN} –rimuove il più lungo pattern dall’inizio Percorso 5 Bash script 50
  • 51. Pattern ${var//tro/sos} –sostituisce tutte le occorrenze di «tro» con «sos» Percorso 5 Bash script 51
  • 52. Pattern ${var:start[:num]} –restituisce una sottostringa Percorso 5 Bash script 52
  • 53. Riferimento indiretto ${!VAR} –il valore della variabile il cui nome è memorizza nella variabile VAR Percorso 5 Bash script 53
  • 54. Array # inizializzazione ARRAY=(23 10) # elementi dell’ array ARRAY[0]=23 ARRAY[1]=10 echo ${ARRAY[1]} Percorso 5 Bash script 54
  • 55. Array # array completo echo ${ARRAY[*]} echo ${ARRAY[@]} # numero elementi echo ${#ARRAY[@]} Percorso 5 Bash script 55
  • 56. Array •Nessun indice è equivalente all’indice 0 –$ARRAY equivale a ${ARRAY[0]} Percorso 5 Bash script 56
  • 57. Array (* vs. @) Percorso 5 Bash script 57
  • 58. Array (* vs. @) Percorso 5 Bash script 58
  • 59. Percorso 5 Bash script 59
  • 60. Input read var1 [… varN] –legge dallo stdin ed assegna le variabili –comando interno –alla prima variabile viene assegnata la prima parola, alla seconda la seconda, …, all’ultima il resto della riga Percorso 5 Bash script 60
  • 61. Input read var1 [… varN] –è possibile usare la redirezione –read è un espressione vera se ha assegnato le variabili Percorso 5 Bash script 61 Control+D
  • 62. Lettura da file Percorso 5 Bash script 62
  • 63. Esecuzione automatica ~/.bash_profile –Eseguito dalla bash quando l’utente si collega alla macchina la prima volta (login) ~/.profile –Eseguito dalla sh quando l’utente si collega alla macchina la prima volta (login) –Eseguito da bash solo se .bash_profile manca ~/.bashrc –Eseguito quando l’utente apre un terminale Percorso 5 Bash script 63
  • 64. Esercizio •Modificare .bash_profile e .bashrc facendo stampare due messaggi diversi •Fare in modo che .bash_profile esegua sempre anche .bashrc •Suggerimenti [[ -f .bashrc ]] && source .bashrc usare «bash -l» per lanciare una bash di login, «ps --forest» per verificare Percorso 5 Bash script 64
  • 65. These slides are licensed under a Creative Commons Attribution Non Commercial Share Alike 4.0 International To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ Versione in Italiano: https://creativecommons.org/licenses/by-nc-sa/4.0/deed.it