In pratica if ci permette di eseguire un'azione o un'altra a seconda del verificarsi di una certa condizione. Ovviamente le azioni possono essere sia singole istruzioni che sequenze di istruzioni.
Vediamo meglio cosa significa con un po di buon pseudo-codice:
if condizione
then
azione1
else
azione2
fi
- if ovviamente identifica il fatto che stiamo ponendo una condizione, mentre fi identifica il fatto che il costrutto if è terminato e lo script può continuare con quello che viene dopo.
- condizione è una clausola che può assumere soltanto un valore booleano, ovvero può essere solo vera o falsa! Ad esempio se una variabile o l'output di un certo comando è uguale ad un valore specifico.
- then identifica la parte di codice che verrà eseguita nel caso che condizione sia vera. Nell'esempio è azione1.
- else invece identifica la parte di codice che viene eseguita nel caso condizione si verifichi falsa. Nell'esempio è azione2.
(ok, non è proprio un script utilissimo, ma serve come esempio)
#! /bin/bash
# chiede il numero all'utente e lo legge
echo "Inserisci numero"
read numero
# controlla se il numero e' maggiore di 0
if test $numero -gt 0
then
echo "il numero $numero e' positivo"
else
echo "il numero $numero non e' positivo"
fi
exit 0
La cosa che si nota subito è il fatto che con if viene usato anche il comando test.
test è un comando da terminale che viene usato per eseguire delle comparazioni tra variabili che possono essere: stringhe, interi o file.
La sintassi di test è abbastanza semplice, anche se ci sono un po di opzioni da ricordare.
La sintassi è: Valore opzione Valore
Dove valore può essere come detto prima una stringa, intero o file. (ovviamente devono essere entrambi dello stesso tipo)
Mentre opzione identifica il confronto da eseguire:
- per stringhe: uguale (=) o diverso (!=)
- per interi: uguale (-eq) maggiore o uguale (-ge) maggiore (-gt) minore o uguale (-le) minore (-lt) diverso (-ne)
- per file: stesso device o inode number (-ef) più nuovo (-nt) più vecchi (-ot)
Si sarebbe potuto scrivere anche
RispondiEliminaif [ $numero -gt 0 ]
ovvero utilizzando le parentesi quadre invece del comando test
si vero si può fare anche in questo modo!
RispondiEliminaGrazie per la precisazione