Gestion de menu avec select

Gestion de menu avec select

By ronan, 26 novembre, 2011

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
$

bertin (not verified)

il y a 7 ans 1 mois

comment faire pour forcer l'acception de choix multiple au menu ?

Si j'ai bien compris, la modification suivante devrait correspondre à ta demande

#!/bin/bash

function sauve {
        echo "Lancement de la sauvegarde"
}

function restaure {
        echo "Lancement de la restauration"
}

PS3="Votre choix : "

select item in "- Sauvegarde -" "- Restauration -" "- Fin -"
do
    for var in $REPLY; do
        echo "Vous avez choisi l'item $var : $item"
        case $var in
                1)
                        # Appel de la fonction sauve
                        sauve
                        ;;
                2)
                        # Appel de la fonction restaure
                        restaure
                        ;;
                3)
                        echo "Fin du script"
                        exit 0
                        ;;
                *)
                        echo "Choix incorrect"
                        ;;
        esac
    done
done

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.

$ ./select.sh
1) - Sauvegarde -
2) - Restauration -
3) - Fin -
Votre choix : 1 2 1 2 1 2 2
Vous avez choisi l'item 1 :
Lancement de la sauvegarde
Vous avez choisi l'item 2 :
Lancement de la restauration
Vous avez choisi l'item 1 :
Lancement de la sauvegarde
Vous avez choisi l'item 2 :
Lancement de la restauration
Vous avez choisi l'item 1 :
Lancement de la sauvegarde
Vous avez choisi l'item 2 :
Lancement de la restauration
Vous avez choisi l'item 2 :
Lancement de la restauration
Votre choix :
1) - Sauvegarde -
2) - Restauration -
3) - Fin -
Votre choix :