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
$
unix-shell-loops.htm