Gestion de menu avec select
Syntaxe :
select var in item1 item2 item3 ..... itemn
do
commandes
done
La commande interne select est une structure de contrôle de type boucle qui permet d'afficher de manière cyclique un menu.
La liste des items sera affichée à l'écran à chaque tour de boucle.
Les items sont indicés automatiquement.
La variable var sera initialisée avec l'item correspondant au choix de l'utilisateur.
Cette commande utilise également deux variables réservées :
-
La variable PS3 représente le prompt utilisé pour la saisiedu choix de l'utilisateur.
Sa valeur par défaut est #?. Elle peut être modifiée si on le souhaite. - La variable REPLY qui contient l'indice de l'item sélectionné.
La variable var contient le libellé du choix et REPLY l'indice de ce dernier.
Exemple :
$ nl select.sh
1 #!/bin/bash
2
3 function sauve {
4 echo "Lancement de la sauvegarde"
5 }
6
7 function restaure {
8 echo "Lancement de la restauration"
9 }
10
11 PS3="Votre choix : "
12
13 select item in "- Sauvegarde -" "- Restauration -" "- Fin -"
14 do
15 echo "Vous avez choisi l'item $REPLY : $item"
16 case $REPLY in
17 1)
18 # Appel de la fonction sauve
19 sauve
20 ;;
21 2)
22 # Appel de la fonction restaure
23 restaure
24 ;;
25 3)
26 echo "Fin du script"
27 exit 0
28 ;;
29 *)
30 echo "Choix incorrect"
31 ;;
32 esac
33 done
$
Exécution :
$ ./select.sh
1) - Sauvegarde -
2) - Restauration -
3) - Fin -
Votre choix : 2
Vous avez choisi l'item 2 : - Restauration -
Lancement de la restauration
La saisie de la touche [Entrée] permet de réafficher le menu :
$ .
Votre choix : # Appui sur la touche [Entrée]
1) - Sauvegarde -
2) - Restauration -
3) - Fin -
Votre choix : 3
Vous avez choisi l'item 3 : - Fin -
Fin du script
$
Commentaires
bertin (non vérifié)
mar, 02/01/2018 - 14:50
Permalien
saisies multiples
comment faire pour forcer l'acception de choix multiple au menu ?
ronan
mer, 03/01/2018 - 14:17
Permalien
Avec une boucle for
Si j'ai bien compris, la modification suivante devrait correspondre à ta demande
J'ai ajouté la boucle for "for var in $REPLY; do" qui permet de boucler sur les différentes valeurs saisies séparées par un espace.
Ajouter un commentaire