Fonction s'appelant elle-même ?

Fonction s'appelant elle-même ? - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 24-05-2006 à 11:33:01    

Salut,
 
Mon problème semble simple, mais je ne sais comment le résoudre.  
Je cherche à faire un menu :
 

Code :
  1. function menu(){
  2. # Création d'un menu de sélection
  3. echo "---- Choix du protocole de test -----"
  4. echo "Appuyez sur une touche, puis validez."
  5. echo "1) FTP"
  6. echo "2) HTML"
  7. echo "3) SMTP"
  8. read input
  9. case $input in
  10.  1)
  11.  mesureFTP $1;;
  12.  2)
  13.  echo "choix 2";;
  14.  3)
  15.  echo "choix 3";;
  16.  *)
  17.  echo "Veuillez entrer un chiffre entre 1 et 3, merci..."
  18.                 menu ;; # relance ?
  19. esac
  20. }
  21. menu


 
Mais si j'entre autre chose que 1, 2 ou 3, la fonction, sensé se relancer via l'appel de son nom, ne le fait pas. Comment dois-je procéder ?
 
Merci.


Message édité par kwadbox le 24-05-2006 à 11:34:11
Reply

Marsh Posté le 24-05-2006 à 11:33:01   

Reply

Marsh Posté le 24-05-2006 à 11:38:06    

mettre ton code dnas un do .. while avec comme condition dans le while que la touche enfoncée est un 1, 2 ou 3 (ou le contraire, je sais plus)


Message édité par stupidduck le 24-05-2006 à 11:38:42
Reply

Marsh Posté le 24-05-2006 à 13:26:48    

la commande select est idéale pour faire ca.


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 24-05-2006 à 14:40:36    

Salut,
 
J'ai opté pour le while...do...done pour la boucle, étant donné que le MAN select n'est pas franchement explicite.
 

Code :
  1. while [ `$input` -ne `1|2|3|q` ];
  2. do
  3.  clear
  4.  echo "---- Choix du protocole de test -----"
  5.  echo "Appuyez sur une touche, puis validez."
  6.  echo "1) FTP"
  7.  echo "2) HTML"
  8.  echo "3) SMTP"
  9.  echo "'q' pour quitter"
  10.  read input
  11. case $input in
  12.  1)
  13.  mesureFTP $1
  14.  bye
  15.  exit 1;;
  16.  2)
  17.  echo "choix 2"
  18.  bye
  19.  exit 1;;
  20.  3)
  21.  echo "choix 3"
  22.  bye
  23.  exit 1;;
  24.  q)
  25.  clear
  26.  echo "Script terminé. Bonne journée."
  27.  exit 1;;
  28. esac
  29. done


 
Merci.

Reply

Marsh Posté le 24-05-2006 à 14:52:55    

Mieux !
 
Comme je n'ai su rappeler ma fonction, j'ai carrément rappelé le script en lui passant le paramètre en variable.
 

Code :
  1. function menu(){
  2. # Création d'un menu de sélection
  3. echo "---- Choix du protocole de test -----"
  4. echo "Appuyez sur une touche, puis validez."
  5. echo "1) FTP"
  6. echo "2) HTML"
  7. echo "3) SMTP"
  8. echo "'q' pour quitter"
  9. read input
  10. case $input in
  11.  1)
  12.  mesureFTP $1
  13.  bye
  14.  exit 1;;
  15.  2)
  16.  echo "choix 2"
  17.  bye
  18.  exit 1;;
  19.  3)
  20.  echo "choix 3"
  21.  bye
  22.  exit 1;;
  23.  q|Q)
  24.  clear
  25.  echo "Script terminé. Bonne journée."
  26.  exit 1;;
  27.  *)
  28.  echo "Veuillez entrer un chiffre entre 1 et 3. Merci."
  29.  ./`basename 0` $ip;;
  30. esac
  31. }
  32. menu


 
Comme ça, il ne passe pas son temps à faire une boucle (presque) inutile.
 :D


Message édité par kwadbox le 24-05-2006 à 16:09:58
Reply

Marsh Posté le 24-05-2006 à 18:30:41    

http://aplawrence.com/Basics/using-select.html
 
google
 
man bash pour les courageux.


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 29-05-2006 à 12:01:40    

Ok, merci. Du coup, voilà le menu réalisé :
 

Code :
  1. function menu(){
  2. echo "---- Choix du protocole de test -----"
  3. echo "Appuyez sur une touche, puis validez."
  4. select j in 'ping' 'ftp' 'html' 'html+proxy' 'iperf' 'quit'
  5.  do
  6.   case $j in
  7.    ping)
  8.    mesure logping
  9.    bye
  10.    exit 0;;
  11.    ftp)
  12.    mesure logftp
  13.    bye
  14.    exit 0;;
  15.    html)
  16.    mesure loghtml
  17.    bye
  18.    exit 0;;
  19.    html+proxy)
  20.    mesure logproxy
  21.    bye
  22.    exit 0;;
  23.    iperf)
  24.    mesure logiperf
  25.    bye
  26.    exit 0;;
  27.    quit)
  28.    clear
  29.    echo "Script terminé. Bonne journée."
  30.    exit 0;;
  31.    *)
  32.    echo "Veuillez entrer un chiffre entre 1 et 5. Merci."
  33.    echo "Touche '6' pour quitter, 'ctrl+d' pour interrompre";;
  34.   esac
  35. done
  36. }
  37. menu


 
Il ne me reste plus qu'à élaborer les fonctions de test du réseau.
Mine de rien, ça commence à faire quelques pages (4 pour être précis).
 :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed