Créer un petit menu dans un script bash

Créer un petit menu dans un script bash - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 01-02-2004 à 01:04:51    

Hello,
 
J'aimerai pouvoir, au sein d'un même script bash, n'exécuter que différentes parties du code en fonction du choix que je fais au début.
En fait j'ai un script de sauvegarde automatisé mais j'aimerai le décomposer en plusieurs étapes.
Au lancement du script, j'aurai un menu du style :
 
1) Création du fichier home.tar.gz
2) Création des fichiers etc.tar.gz et root.tar.gz
3) Gravage du fichier home.tar.gz
4) Gravage des fichiers etc.tar.gz et root.tar.gz
 
Donc pour résumer, j'aimerai connaître la manière de faire des renvois à certaines parties du script et de quitter chaque partie une fois qu'elle est exécutée.
 
Merci :)

Reply

Marsh Posté le 01-02-2004 à 01:04:51   

Reply

Marsh Posté le 01-02-2004 à 02:24:01    

http://sciences.univ-pau.fr/dptinf [...] article=62
(sachant que les {{}} sont des balises de mise en forme de l'article, qui n'a pas marché ici)

Reply

Marsh Posté le 01-02-2004 à 12:11:52    

c tout simple, tu te sers des IF,
 
si variable = 1
faire ....
si variable = 2
faire ....
 
 
ou bien encore avec des switch case


Message édité par dam1330 le 01-02-2004 à 12:13:01
Reply

Marsh Posté le 01-02-2004 à 13:31:50    

j'avais vu une fonction toute faite pour faire un menu ... mais je ne m'en rappelle plus

Reply

Marsh Posté le 01-02-2004 à 13:35:39    

merci pour vos réponse.
GUG : si tu retrouves cette fonction, je suis preuneur car je n'ai aucune compétence de programmateur :/

Reply

Marsh Posté le 01-02-2004 à 17:03:59    

while
echo "######Voici mon menu######"
echo "Choix 1 tu fais ca blabla"
echo ......
.
.
.
echo "et voila le menu est fini"
echo "Votre chois"
read choix
test a$choix -lt x (x est le nombre de menu + 1)
do
case a$choix in
         1) ton code pour le choix 1;;
         2) ton code pour le choix 2;;
         .
         x-1);;
         x) echo "là c\'est fini";;
         *) echo "tu t\'es trompé banane";;
esac
done


Message édité par jijiz le 01-02-2004 à 20:01:55

---------------
Mon Feedback: http://forum.hardware.fr/hardwaref [...] m#t2928561
Reply

Marsh Posté le 01-02-2004 à 17:04:15    

ecliptux a écrit :

merci pour vos réponse.
GUG : si tu retrouves cette fonction, je suis preuneur car je n'ai aucune compétence de programmateur :/

programmeur. merci


---------------
Mon Feedback: http://forum.hardware.fr/hardwaref [...] m#t2928561
Reply

Marsh Posté le 01-02-2004 à 17:15:15    

jijiz a écrit :

programmeur. merci


Vivi désolé :D  
 
Merci pour ton aide.
Je devrais m'en sortir :)

Reply

Marsh Posté le 01-02-2004 à 17:31:39    

mais ce fut avec grand plaisir vu que j'ai le partiel unix demain, ca me fait réviser:!


---------------
Mon Feedback: http://forum.hardware.fr/hardwaref [...] m#t2928561
Reply

Marsh Posté le 01-02-2004 à 17:54:20    

Pour la partie purement menu, l'instruction 'select' est bien utile.
Pour plus d'info sur 'select' voir le man.
 
Un petit exemple de script utilisant 'select' :

Code :
  1. #!/usr/bin/bash
  2. # Script : choix.sh
  3. PS3="Que voulez vous ? "
  4. select choix in \
  5.    "Premier choix" \
  6.    "Second choix"  \
  7.    "Abandon"
  8. do
  9.    case $REPLY in
  10.       1) echo "C'est du premier choix :"       ;;
  11.       2) echo "Ce n'est que du second choix !" ;;
  12.       3) echo "On abandonne ..."
  13.          break ;;
  14.       *) echo "Choix invalide"  ;;
  15.    esac
  16. done


 
[/fixed]
/home/jp> choix.sh
1) Premier choix
2) Second choix
3) Abandon
Que voulez vous ? 5
Choix invalide
Que voulez vous ?
1) Premier choix
2) Second choix
3) Abandon
Que voulez vous ? 2
Ce n'est que du second choix !
Que voulez vous ? 3
On abandonne ...
/home/jp/Tek-Tips>
[fixed]
 
 
Pour la partie code associée à chaque option du menu, utilise des fonctions.

  • Une fonction doit être définie avant d'être appellée.
  • L'appel à la fonction se fait comme pour une commande externe.
  • Dans le corps de la fonction, $1 $2 ... correspondent aux paramètres passés à l'appel de la fonction.
  • Les paramétres sont passés par valeur
  • Les variables définies à l'extérieur de la fonction sont visibles et modifiables.
  • Des variables locales à la fonction peuvent être créées avec l'instruction 'local'.
  • La sortie de la fonction se fait par 'return n' ou n est le code retour (0)succes). S'il n'y a pas d'instruction 'return' eplicite, la sortie se fait par un 'return $?' implicite lorsque l'exécution du code arrive sur la dernier accolade de la définition de la fonction.


Voici un exemple de fonction avec son utilisation :

Code :
  1. #!/usr/bin/bash
  2. # OuiNon -- Saisie réponse Oui/Non
  3. # Appel:  $1 = Question
  4. #         $2 = Réponse par défaut
  5. # Status: 0  = Oui
  6. #         1  = Non
  7. OuiNon()
  8. {
  9.    local qst def rep
  10.    qst="${1:-'Oui ou Non ? '}"
  11.    def="$2"
  12.    while :
  13.    do
  14.       read -p "$qst" rep || exit 1
  15.       case "$(echo "${rep:-$def}" | tr '[a-z]' '[A-Z]')" in
  16.         O|OUI|Y|YES) return 0 ;;
  17.         N|NON|NO)    return 1 ;;
  18.         "" )          :        ;;
  19.         *)           echo "Réponse invalide: $rep" ;;
  20.       esac
  21.    done
  22. }
  23. # Utilisation de la fonction
  24. if OuiNon "Voulez vous affichez la date ? " Oui
  25.    then  date
  26.    else  echo "Dommage"
  27. fi


 
 
Voici maintenant un exemple de ce que pourrait être ton script (avec utilisation de 'select' et de fonctions) :

Code :
  1. #!/usr/bin/bash
  2. #================================================
  3. # F O N C T I O N S . . .
  4. #================================================
  5. #------------------------------------------------
  6. # Menu - Affichage d'un menu
  7. #------------------------------------------------
  8. # Args : $1    = Titre du menu
  9. #        $2n   = Fonction associée 'n' au choix
  10. #        $2n+1 = Libellé du choix 'n' du menu
  11. #------------------------------------------------
  12. Menu()
  13. {
  14.   local -a menu fonc
  15.   local titre nbchoix
  16.   # Constitution du menu
  17.   if [[ $(( $# % 1 )) -ne 0 ]] ; then
  18.      echo "$0 - Menu invalide" >&2
  19.      return 1
  20.   fi
  21.   titre="$1"
  22.   shift 1
  23.   set "$@" "return 0" "Sortie"
  24.   while [[ $# -gt 0 ]]
  25.   do
  26.      (( nbchoix += 1 ))
  27.      fonc[$nbchoix]="$1"
  28.      menu[$nbchoix]="$2"
  29.      shift 2
  30.   done
  31.   # Affichage menu
  32.   PS3="Votre choix ? "
  33.   while :
  34.   do
  35.      echo
  36.      [[ -n "$titre" ]] && echo -e "$titre\n"
  37.      select choix in "${menu[@]}"
  38.      do
  39.         if [[ -z "$choix" ]]
  40.            then echo -e "\nChoix invalide"
  41.            else eval ${fonc[$REPLY]}
  42.         fi
  43.         break
  44.      done || break
  45.   done
  46. }
  47. #------------------------------------------------
  48. # CHome - Création fichier home.tar.gz
  49. #------------------------------------------------
  50. CHome()
  51. {
  52.    echo -e "\n***\n*** CHome\n***\n"
  53. }
  54. #------------------------------------------------
  55. # CEtcRoot - Création fichiers etc/root.tar.gz
  56. #------------------------------------------------
  57. CEtcRoot()
  58. {
  59.    echo -e "\n***\n*** CEtcRoot\n***\n"
  60. }
  61. #------------------------------------------------
  62. # GHome - Gravage fichier home.tar.gz
  63. #------------------------------------------------
  64. GHome()
  65. {
  66.    echo -e "\n***\n*** GHome\n***\n"
  67. }
  68. #------------------------------------------------
  69. # GEtcRoot - Gravage fichiers etc/root.tar.gz
  70. #------------------------------------------------
  71. GEtcRoot()
  72. {
  73.    echo -e "\n***\n*** GEtcRoot\n***\n"
  74. }
  75. #================================================
  76. # M A I N . . .
  77. #================================================
  78. Menu \
  79.   "+++ Menu Sauvegardes +++"                           \
  80.   CHome    "Création fichier  home.tar.gz"          \
  81.   CEtcRoot "Création fichiers  etc.tar.gz root.tar.gz" \
  82.   GHome    "Gravage  fichier  home.tar.ge"             \
  83.   GEtcRoot "Gravage  fichiers  etc.tar.gz root.tar.gz"



---------------
Jean Pierre.
Reply

Marsh Posté le 01-02-2004 à 17:54:20   

Reply

Marsh Posté le 01-02-2004 à 20:43:43    

c mieux ma solution,,,, nahhh!


---------------
Mon Feedback: http://forum.hardware.fr/hardwaref [...] m#t2928561
Reply

Marsh Posté le 01-02-2004 à 23:55:39    

GUG a écrit :

j'avais vu une fonction toute faite pour faire un menu ... mais je ne m'en rappelle plus  


 
C'est pas pdmenu ?

Reply

Sujets relatifs:

Leave a Replay

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