scripting - esecuzione condizionale - costrutti iterativi - variabili (quoting, espansione)
DESCRIPTION
Master: Amministratore Linux - Livello Base Nel contesto della formazione professionale rivolta ad aziende ed enti pubblici, sono stati preparati ed erogati dei corsi di Amministratore di sistemi Linux, al livello base ed al livello avanzato. Il contenuto del corso è allineato con alcuni moduli della certificazione LPIC (Linux Professional Institute Certification), a cavallo tra i livelli 1 e 2. Tutto il materiale didattico è disponibile liberamente con licenza Creative Commons BY-NC-SA. I docenti del corso sono i proff. Giovanni Squillero, Bartolomeo Montrucchio e Fulvio Corno. Maggiori informazioni: http://elite.polito.it/index.php/teaching/current-courses/255-master-linux-adminTRANSCRIPT
![Page 1: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/1.jpg)
![Page 2: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/2.jpg)
“… a strange language, shaped as much
by history as by design” — Kernigham & Pike
Percorso 5 Bash script 2
![Page 3: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/3.jpg)
Il primo script
Percorso 5 Bash script 3
![Page 4: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/4.jpg)
Esecuzione
Percorso 5 Bash script 4
![Page 5: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/5.jpg)
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
![Page 6: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/6.jpg)
Variabili speciali
$RANDOM
– un numero casuale
Percorso 5 Bash script 6
![Page 7: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/7.jpg)
Variabili speciali
$BASH
$BASHPID
$BASHOPTS
$BASH_VERSION
…
– informazioni sulla bash
Percorso 5 Bash script 7
![Page 8: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/8.jpg)
Variabili speciali
$USER
$GROUPS
– informazioni sull’utente
Percorso 5 Bash script 8
![Page 9: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/9.jpg)
$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
![Page 10: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/10.jpg)
Argomenti e Variabili speciali
$*
$@
– gli argomenti dello script (tutti insieme)
– $* è equivalente a $@
– "$*" non è equivalente a "$@"
$#
– numero di argomenti
Percorso 5 Bash script 10
![Page 11: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/11.jpg)
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
![Page 12: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/12.jpg)
Il primo script (v2)
Percorso 5 Bash script 12
sha bang
![Page 13: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/13.jpg)
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
![Page 14: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/14.jpg)
Informazioni sul processo
$$
– il PID corrente
$UID / $GID
– l’UID / il GID corrente
Percorso 5 Bash script 14
![Page 15: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/15.jpg)
Test
$?
– il valore di ritorno (exit code) dell’ultimo comando
– Convenzione
• zero: tutto ok
• maggiore di zero: problemi
Percorso 5 Bash script 15
![Page 16: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/16.jpg)
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
![Page 17: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/17.jpg)
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
![Page 18: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/18.jpg)
Controlli principali
s1 = s2 la stringa s1 è uguale a s2
s1 != s2 la stringa s1 è diversa da s2
Percorso 5 Bash script 18
![Page 19: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/19.jpg)
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
![Page 20: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/20.jpg)
[ 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
![Page 21: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/21.jpg)
Esecuzione condizionale
if espressione
then
lista comandi
elif espressione
lista comandi
…
elif espressione
lista comandi
else
lista comandi
fi
Percorso 5 Bash script 21
![Page 22: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/22.jpg)
Esecuzione condizionale
Percorso 5 Bash script 22
![Page 23: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/23.jpg)
Hacks
• Il comando viene eseguito se expr è vera
• Il comando viene eseguito se expr è falsa
Percorso 5 Bash script 23
expr && comando
expr || comando
![Page 24: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/24.jpg)
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
![Page 25: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/25.jpg)
Alternative
case parola in
pat1) comandi ;;
pat2) comandi ;;
…
*) comandi default ;;
esac
Percorso 5 Bash script 25
![Page 26: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/26.jpg)
Alternative
Percorso 5 Bash script 26
![Page 27: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/27.jpg)
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
![Page 28: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/28.jpg)
Costrutti iterativi
while espressione
do
lista comandi
done
Percorso 5 Bash script 28
until espressione
do
lista comandi
done
![Page 29: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/29.jpg)
Costrutti iterativi
Percorso 5 Bash script 29
![Page 30: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/30.jpg)
break/continue
while espressione
do
lista comandi
expr1 && break
lista comandi
expr2 || continue
lista comandi
done
Percorso 5 Bash script 30
![Page 31: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/31.jpg)
Costrutti iterativi
for var in list
do
lista comandi
done
Percorso 5 Bash script 31
![Page 32: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/32.jpg)
Costrutti iterativi
Percorso 5 Bash script 32
![Page 33: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/33.jpg)
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: %3d\n" 23
printf -v FOO "Formattato: %3d\n" 23
![Page 34: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/34.jpg)
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
![Page 35: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/35.jpg)
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
![Page 36: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/36.jpg)
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
![Page 37: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/37.jpg)
Quoting
Percorso 5 Bash script 37
![Page 38: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/38.jpg)
$* 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
![Page 39: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/39.jpg)
$* vs. $@
Percorso 5 Bash script 39
![Page 40: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/40.jpg)
$* vs. $@
Percorso 5 Bash script 40
![Page 41: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/41.jpg)
Espansioni
Percorso 5 Bash script 41
![Page 42: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/42.jpg)
Esercizio
• Scrivere lo script args.sh utilizzato negli esempi
Percorso 5 Bash script 42
![Page 43: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/43.jpg)
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
![Page 44: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/44.jpg)
Valori di default delle variabili
Percorso 5 Bash script 44
![Page 45: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/45.jpg)
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
![Page 46: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/46.jpg)
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
![Page 47: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/47.jpg)
Valori alternativi delle variabili
Percorso 5 Bash script 47
![Page 48: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/48.jpg)
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
![Page 49: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/49.jpg)
Pattern
${var%PATTERN}
– rimuove il più piccolo pattern dalla fine
${var%%PATTERN}
– rimuove il più lungo pattern dalla fine
Percorso 5 Bash script 49
![Page 50: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/50.jpg)
Pattern
${var#PATTERN}
– rimuove il più piccolo pattern dall’inizio
${var##PATTERN}
– rimuove il più lungo pattern dall’inizio
Percorso 5 Bash script 50
![Page 51: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/51.jpg)
Pattern
${var//tro/sos}
– sostituisce tutte le occorrenze di «tro» con «sos»
Percorso 5 Bash script 51
![Page 52: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/52.jpg)
Pattern
${var:start[:num]}
– restituisce una sottostringa
Percorso 5 Bash script 52
![Page 53: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/53.jpg)
Riferimento indiretto
${!VAR}
– il valore della variabile il cui nome è memorizza nella variabile VAR
Percorso 5 Bash script 53
![Page 54: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/54.jpg)
Array
# inizializzazione
ARRAY=(23 10)
# elementi dell’ array
ARRAY[0]=23
ARRAY[1]=10
echo ${ARRAY[1]}
Percorso 5 Bash script 54
![Page 55: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/55.jpg)
Array
# array completo
echo ${ARRAY[*]}
echo ${ARRAY[@]}
# numero elementi
echo ${#ARRAY[@]}
Percorso 5 Bash script 55
![Page 56: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/56.jpg)
Array
• Nessun indice è equivalente all’indice 0
– $ARRAY equivale a ${ARRAY[0]}
Percorso 5 Bash script 56
![Page 57: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/57.jpg)
Array (* vs. @)
Percorso 5 Bash script 57
![Page 58: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/58.jpg)
Array (* vs. @)
Percorso 5 Bash script 58
![Page 59: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/59.jpg)
Percorso 5 Bash script 59
![Page 60: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/60.jpg)
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
![Page 61: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/61.jpg)
Input
read var1 [… varN]
– è possibile usare la redirezione
– read è un espressione vera se ha assegnato le variabili
Percorso 5 Bash script 61
Control+D
![Page 62: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/62.jpg)
Lettura da file
Percorso 5 Bash script 62
![Page 63: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/63.jpg)
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
![Page 64: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/64.jpg)
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
![Page 65: Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoting, espansione)](https://reader033.vdocuments.site/reader033/viewer/2022052908/559487231a28ab63608b4611/html5/thumbnails/65.jpg)
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