Unix / Linux - Operatori di Shell di Base

Ciao, futuri programmatori! Sono entusiasta di guidarvi attraverso il mondo affascinante degli operatori di shell Unix/Linux. Come qualcuno che ha insegnato scienze informatiche per oltre un decennio, posso assicurarvi che padroneggiare questi operatori sarà un cambiamento di gioco nel vostro percorso di programmazione. Immersi!

Unix / Linux - Basic Operators

Operatori Aritmetici

Gli operatori aritmetici sono i mattoni fondamentali delle operazioni matematiche nello scripting di shell. Loro ci permettono di eseguire calcoli di base all'interno dei nostri script.

Ecco una tabella degli operatori aritmetici più comuni:

Operatore Descrizione Esempio
+ Addizione expr $a + $b
- Sottrazione expr $a - $b
* Moltiplicazione expr $a \* $b
/ Divisione expr $a / $b
% Modulo expr $a % $b
= Assegnazione a=$b

Guardiamo un esempio pratico:

#!/bin/bash
a=10
b=5

echo "Addizione: `expr $a + $b`"
echo "Sottrazione: `expr $a - $b`"
echo "Moltiplicazione: `expr $a \* $b`"
echo "Divisione: `expr $a / $b`"
echo "Modulo: `expr $a % $b`"

In questo script, stiamo usando il comando expr per eseguire operazioni aritmetiche. Le backticks () vengono utilizzate per eseguire il comandoexpr` e sostituire la sua uscita.

Quando eseguiamo questo script, vedremo:

Addizione: 15
Sottrazione: 5
Moltiplicazione: 50
Divisione: 2
Modulo: 0

Ricorda, nello scripting di shell, gli spazi sono cruciali. expr$a+$b non funzionerà, ma expr $a + $b funzionerà. È come dare alle tue variabili lo spazio per respirare!

Operatori Relazionali

Gli operatori relazionali vengono utilizzati per confrontare valori. Sono essenziali per creare condizioni nei tuoi script.

Ecco una tabella degli operatori relazionali:

Operatore Descrizione Esempio
-eq Uguale a [ $a -eq $b ]
-ne Diverso da [ $a -ne $b ]
-gt Maggiore di [ $a -gt $b ]
-lt Minore di [ $a -lt $b ]
-ge Maggiore o uguale a [ $a -ge $b ]
-le Minore o uguale a [ $a -le $b ]

Vediamo questi in azione:

#!/bin/bash
a=10
b=20

if [ $a -eq $b ]
then
echo "$a è uguale a $b"
elif [ $a -gt $b ]
then
echo "$a è maggiore di $b"
else
echo "$a è minore di $b"
fi

Questo script confronta a e b utilizzando operatori relazionali. Quando lo eseguiamo, vedremo:

10 è minore di 20

Consiglio professionale: Pensa a questi operatori come a domande. "-eq" è come chiedere "Sono questi uguali?", "-gt" è come chiedere "Questo è maggiore di quello?". Aiuta a verbalizzare queste comparazioni quando stai scrivendo i tuoi script.

Operatori Booleani

Gli operatori booleani ci permettono di combinare più condizioni. Sono come la colla logica dei tuoi script.

Ecco una tabella degli operatori booleani:

Operatore Descrizione Esempio
! NOT [ ! false ]
-o OR [ $a -lt 20 -o $b -gt 100 ]
-a AND [ $a -lt 20 -a $b -gt 100 ]

Vediamo come usarli in uno script:

#!/bin/bash
a=10
b=20

if [ $a -lt 20 -a $b -gt 15 ]
then
echo "Entrambe le condizioni sono vere"
else
echo "Almeno una condizione è falsa"
fi

Quando eseguiamo questo script, vedremo:

Entrambe le condizioni sono vere

Mi piace pensare agli operatori booleani come strumenti decisionali. Aiutano il tuo script a fare scelte basate su più fattori, proprio come facciamo nella vita reale!

Operatori di Stringa

Gli operatori di stringa vengono utilizzati per confrontare e manipolare stringhe di testo. Sono incredibilmente utili quando si lavora con dati testuali.

Ecco una tabella degli operatori di stringa:

Operatore Descrizione Esempio
= Uguale a [ $a = $b ]
!= Diverso da [ $a != $b ]
-z Stringa è vuota [ -z $a ]
-n Stringa non è vuota [ -n $a ]
str Stringa non è vuota [ $a ]

Vediamo questi in azione:

#!/bin/bash
a="Hello"
b="World"

if [ $a = $b ]
then
echo "Le stringhe sono uguali"
elif [ -z $a ]
then
echo "La stringa a è vuota"
elif [ -n $b ]
then
echo "La stringa b non è vuota"
else
echo "Nessuna delle condizioni sopra è vera"
fi

Quando eseguiamo questo script, otterremo:

La stringa b non è vuota

Gli operatori di stringa sono come le regole grammaticali dello scripting di shell. Aiutano a fare senso del testo con cui il tuo script sta lavorando.

Operatori di Test di File

Gli operatori di test di file vengono utilizzati per testare diverse condizioni di file. Sono essenziali quando il tuo script deve interagire con file e directory.

Ecco una tabella di alcuni operatori di test di file comuni:

Operatore Descrizione Esempio
-d file Directory esistente [ -d $file ]
-f file File esistente e è un file regolare [ -f $file ]
-r file File è leggibile [ -r $file ]
-w file File è scrivibile [ -w $file ]
-x file File è eseguibile [ -x $file ]
-s file File non ha dimensione zero [ -s $file ]

Vediamo questi in azione:

#!/bin/bash
file="/etc/passwd"

if [ -f $file ]
then
echo "Il file esiste"
if [ -r $file ]
then
echo "Il file è leggibile"
fi
if [ -w $file ]
then
echo "Il file è scrivibile"
fi
if [ -x $file ]
then
echo "Il file è eseguibile"
fi
else
echo "Il file non esiste"
fi

Quando eseguiamo questo script, potremmo vedere qualcosa come:

Il file esiste
Il file è leggibile

Gli operatori di test di file sono come gli strumenti detective del tuo script. Aiutano il tuo script a capire cosa può e cosa non può fare con diversi file.

Operatori di Shell C

La Shell C (csh) ha il proprio set di operatori che sono leggermente diversi dalla Shell Bourne. Ecco alcuni esempi:

#!/bin/csh
set a = 10
set b = 20

if ($a == $b) then
echo "a è uguale a b"
else if ($a != $b) then
echo "a non è uguale a b"
endif

if ($a > $b) then
echo "a è maggiore di b"
else if ($a < $b) then
echo "a è minore di b"
endif

Nella Shell C, usiamo == per l'uguaglianza e != per la disuguaglianza. Possiamo anche usare direttamente > e < per i confronti.

Operatori di Shell Korn

La Shell Korn (ksh) combina funzionalità sia dalla Shell Bourne che dalla Shell C. Ecco un esempio:

#!/bin/ksh
a=10
b=20

if ((a == b))
then
print "a è uguale a b"
elif ((a != b))
then
print "a non è uguale a b"
fi

if ((a > b))
then
print "a è maggiore di b"
elif ((a < b))
then
print "a è minore di b"
fi

Nella Shell Korn, possiamo usare (( e )) per le operazioni aritmetiche e i confronti, il che rende la sintassi più pulita e intuitiva.

Ricorda, la pratica rende perfetto! Non aver paura di sperimentare con questi operatori nei tuoi script. Ogni volta che li usi, diventerai più a tuo agio e competente. Buon scripting!

Credits: Image by storyset