In questo articolo, tratto dal capitolo 7 del libro Windows PowerShell 2.0 - Guida completa, di Efran Cobisi, si analizzano le caratteristiche più interessanti ed utili del blocco switch, fornendo dei brevi ma completi esempi d'uso.
Il blocco switch permette di verificare il valore di una particolare espressione a fronte
di una lista di possibilità predefinite dall'utente ed eseguire l'insieme di istruzioni
corrispondente.
Nonostante questo blocco condizionale abbia una semantica e una sintassi molto
simili ai blocchi omonimi presenti nei linguaggi di derivazione C, PowerShell ne offre
una variante ricca di funzionalità innovative.
Un’istruzione switch di base prevede l’impiego della relativa keyword e l’indicazione
dell’espressione da verificare, seguita dalla lista delle condizioni da testare, caso per
caso, cui sono associati i blocchi di codice da eseguire nel caso in cui le relative condizioni
siano soddisfatte.
Nell’utilizzo più semplice, un blocco di questo tipo risulta quindi equivalente a una
serie di istruzioni if, una di seguito all’altra, dove l’operando di sinistra è in comune
tra tutte e ogni condizione è un confronto di uguaglianza rispetto a un’altra particolare
espressione.
La sintassi di base del blocco switch è la seguente:
switch (<espressione>) {
<valore> { <elenco comandi> }
<valore> { <elenco comandi> }
<valore> { <elenco comandi> }
...
}
Nello script che segue, per esempio, la shell visualizza a video un messaggio in base
all’ora corrente:
$hour = (Get-Date).Hour
switch ($hour) {
12 { Write-Host 'Ora di pranzo' }
20 { Write-Host 'Ora di cena' }
}
Così come avviene per gli operatori di confronto, anche nel caso di switch il paragone
tra l’espressione da verificare e quella dei diversi casi avviene facendo il cast di questi
ultimi verso il tipo della prima. Lo script che segue, pertanto, è perfettamente lecito
(anche se non porta ad alcun risultato):
$test = 619
switch ($test) {
235.2 { Write-Host 'Un numero in virgola mobile' }
(Get-Date) { Write-Host 'Una data' }
'xyz' { Write-Host 'Una stringa' }
}
Là dove il cast non è possibile, d’altra parte, la shell considera la condizione non
soddisfatta e prosegue con l’analisi delle condizioni successive, senza generare alcun
errore.