Programmare la shell in UNIX Linux e MacOS :
- Aspetti sintattici
- Comandi interni, esterni e composti
- Variabili
Variabili per memorizzare informazioni numeriche ed alfanumeriche
val=7
echo $val
word='Ciao'
echo $word
phrase="Space Coding"
echo $phrase
Struttura di uno script della shell UNIX
Con un editor scrivere il seguente codice e memorizzarlo come today.sh
#!/bin/bash
#utilizzando il backtic `
data=`date +%d/%m/%Y`
echo "Oggi è il $data"
#oppure con le parentesi tonde
echo "Oggi è il $(date +%d/%m/%Y)."
Per eseguire lo script appena creato, e in generale ogni script, dobbiamo prima renderlo eseguibile con il comando chmod +x today.sh e solo successivamente digitare ./data.sh nella shell per vedere il risultato su standard ouput
Comandi composti
Scrivere il seguente codice in un file con estensione .sh
#!/bin/bash
# quando si usano più comandi su una linea si separano con il ;
# questi comandi si chiamano composti
a=3; b=4; echo "I valori sono $a e $b"
#!/bin/bash
a=1; b=2
echo "Prima del comando composto: A = $a, B = $b"
(b=3; echo "Durante il comando composto: A = $a, B = $b")
echo "Dopo il comando composto: A = $a, B = $b"
Sotto shell
Se le istruzioni che costituiscono il comando composto sono delimitate da parentesi tonde, allora il comando composto viene eseguito in una sotto-shell della shell in cui gira lo script; questo significa che il comando composto eredita tutte le variabili definite nello script, ma lo scope delle assegnazioni e delle definizioni effettuate nell’ambito del comando composto è limitato al comando stesso. Il comando composto viene eseguito in una sotto-shell, ma nello stesso processo della shell con cui viene eseguito lo script.
#!/bin/bash
a=1; b=2
echo "Prima del comando composto: A = $a, B = $b"
(b=3; echo "Durante il comando composto: A = $a, B = $b")
echo "Dopo il comando composto: A = $a, B = $b"
Operatori booleani
#!/bin/bash
a=1
b=3
(( $a!=0 )) && ( (( $b/$a>=1 )) && echo "Ok" || echo "Ko") || \
echo "Divisione per zero"
assegnare diversi valori alle variabili a e b per visualizzare i diversi risultati.
Nel seguente script analizziamo se due stringhe sono uguali e il loro ordine lessicografico
#!/bin/bash
a='ufficio'
b='casa'
[[ "$a" == "$b" ]] && echo "Sono uguali" || echo "Sono diversi"
[[ "$a" < "$b" ]] && echo "La prima parola viene prima" || echo "La seconda parola viene prima"
Operatori di confronto in UNIX
Nel seguente script vedremo gli operatori di confronto unici di UNIX
#!/bin/bash
a=5
b=2
c=7
d=5
# prestare attenzione agli spazi
if [ $a -eq $d ]
then
echo "$a è uguale a $d"
fi
if [ $a -ne $b ]
then
echo "$a non è uguale a $b"
fi
if [ $a -gt $b ]
then
echo "$a è maggiore di $b"
fi
if [ $a -ge $b ]
then
echo "$a è maggiore o uguale di $b"
fi
if [ $a -lt $c ]
then
echo "$a è minore di $c"
fi
if [ $a -le $c ]
then
echo "$a è minore o uguale di $c"
fi
Nella prossima lezione approfondiremo le strutture di controllo.
Se alcuni termini non ti risultano chiari ti consiglio le precedenti lezioni su UNIX