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

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 :

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.