Unix / Linux Shell: il loop di selezione
Il selectloop fornisce un modo semplice per creare un menu numerato da cui gli utenti possono selezionare le opzioni. È utile quando è necessario chiedere all'utente di scegliere uno o più elementi da un elenco di scelte.
Sintassi
select var in word1 word2 ... wordN
do
Statement(s) to be executed for every word.
done
Qui var è il nome di una variabile eword1 per wordNsono sequenze di caratteri separati da spazi (parole). Ogni volta che il filefor viene eseguito il ciclo, il valore della variabile var è impostato sulla parola successiva nell'elenco di parole, word1 per wordN.
Per ogni selezione, verrà eseguita una serie di comandi all'interno del ciclo. Questo ciclo è stato introdotto inkshed è stato adattato in bash. Non è disponibile insh.
Esempio
Ecco un semplice esempio per consentire all'utente di selezionare una bevanda a scelta:
#!/bin/ksh
select DRINK in tea cofee water juice appe all none
do
case $DRINK in
tea|cofee|water|all)
echo "Go to canteen"
;;
juice|appe)
echo "Available at home"
;;
none)
break
;;
*) echo "ERROR: Invalid selection"
;;
esac
done
Il menu presentato dal ciclo di selezione è simile al seguente:
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$
È possibile modificare il prompt visualizzato dal ciclo di selezione alterando la variabile PS3 come segue:
$PS3 = "Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$