44 votes

Mettre en pause l'exécution et attendre une saisie de l'utilisateur

Je ai un script que je fais et je ai un problème avec cela: Je voudrais mettre en pause l'exécution et attendre user entrée. Je ai pensé que je l'avais avec la commande read -p -n 1 $foo mais le système a des problèmes avec cette commande. Voici mon script actuel:

#!/bin/sh

# Ititialization

mainmenu () {
  echo "Appuyez sur 1 pour mettre à jour votre système"
  echo "Appuyez sur 2 pour installer samba"
  echo "Appuyez sur 3 pour installer vsFTPd"
  echo "Appuyez sur 4 pour installer la version actuelle de Webmin"
  echo "Appuyez sur 5 pour configurer samba pour Active Directory"
  echo "Appuyez sur x pour quitter le script"
  read -n 1 -p "Sélection d'entrée:" mainmenuinput
  if [ "$mainmenuinput" = "1" ]; then
            updatesystem
        elif [ "$mainmenuinput" = "2" ]; then
            installsamba
        elif [ "$mainmenuinput" = "3" ]; then
            installvsftpd
        elif [ "$mainmenuinput" = "4" ]; then
            installwebmin
        elif [ "$mainmenuinput" = "5" ]; then
            configuresambaforactivedirectory
        elif [ "$mainmenuinput" = "x" ];then
            quitprogram
        elif [ "$mainmenuinput" = "X" ];then
            quitprogram
        else
            echo "Vous avez entré une sélection invalide!"
            echo "S'il vous plaît réessayez!"
            echo ""
            echo "Appuyez sur une touche pour continuer..."
            read -n 1
            clear
            mainmenu
        fi
}

# Ceci construit le menu principal et achemine l'utilisateur vers la fonction sélectionnée.

mainmenu

# Ceci exécute la fonction de menu principal.
# Que le plaisir commence !!!! WOOT WOOT !!!!

Vous pouvez remarquer à la fonction mainmenu l'entrée read -n 1 -p "le texte va ici". C'est là que je ai le problème selon ubuntu. Quelqu'un peut-il me dire ce qui ne va pas? Merci!

64voto

NGRhodes Points 8890

Devrait être:

read  -n 1 -p "Sélection d'entrée :" mainmenuinput

Il faut mettre le drapeau n après, car il indique à read d'exécuter après que N caractères sont saisis, sans attendre une ligne entière. Vérifiez help read et ceci pour plus de détails.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X