[shell] Besoin d'aide pour la réalisation d'un menu

Besoin d'aide pour la réalisation d'un menu [shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 21-11-2004 à 14:24:10    

Je souhaite me faire un script pour gérer mes sauvegardes tar.gz et pour cela, je me suis lancé dans al conception d'un menu avec plusieurs choix.
Malheureusement je débute et j'ai quelques soucis que j'ai grand mal à résoudre.
Voici le script (il n'y a pas encore le code de la sauvegarde proprement dite) :

Code :
  1. #!/bin/bash
  2. function aide()
  3. {
  4.    echo ""
  5.    echo "Sauvegarde Spheerys"
  6.    echo "==================="
  7.    echo ""
  8.    echo " 1 - simple compression des donnees dans /sauvelinux"
  9.    echo "     a) sauvegarde manuelle de evolution.tar.bz2"
  10.    echo "     b) sauvegarde manuelle de ecliptux.tar.bz2"
  11.    echo "     c) sauvegarde manuelle de etc.tar.bz2"
  12.    echo "     d) sauvegarde manuelle de root.tar.bz2"
  13.    echo " 2 - compression des donnees dans /sauvelinux puis delocalisation /mnt/sauvelinux"
  14.    echo " 3 - realisation d'une iso dans /sauvelinux"
  15.    echo " 4 - gravage de l'iso dans /media/cdrom0"
  16.    echo " q - quitter"
  17.    echo ""
  18.    echo "Choix : "
  19.    read reponse
  20. }
  21. if [ $# > 0 ]
  22. then
  23.    reponse=$1
  24. fi
  25. while [ "$reponse" -ne "q" ]
  26. do
  27.      if [ "$reponse" -ne "1"
  28. && "$reponse" -ne "2"
  29. && "$reponse" -ne "3"
  30. && "$reponse" -ne "4"
  31. && "$reponse" -ne "a"
  32. && "$reponse" -ne "b"
  33. && "$reponse" -ne "c"
  34. && "$reponse" -ne "d"
  35. && "$reponse" -ne "q" ]
  36.    then
  37.       aide
  38.    fi
  39.    case $reponse in
  40.      1) echo "Choix 1 lance"
  41.         reponse=q
  42. ;;
  43.      2) echo "Choix 2 lance"
  44.         reponse=q
  45. ;;
  46.      3) echo "Choix 3 lance"
  47. reponse=q
  48. ;;
  49.      4) echo "Choix 4 lance"
  50. reponse=q
  51. ;;
  52.      a) echo "Choix a lance"
  53. reponse=q
  54. ;;
  55.      b) echo "Choix b lance"
  56. reponse=q
  57. ;;
  58.      c) echo "Choix c lance"
  59. reponse=q
  60. ;;
  61.      d) echo "Choix d lance"
  62. reponse=q
  63. ;;
  64.      q) reponse=q
  65. ;;
  66.    esac
  67. done


Seulement, qd je lance le script, voilà l'erreur :

Citation :

[ecliptux]@[~/Systeme/Scripts]$ savelinux
/home/ecliptux/bin/savelinux: line 34: syntax error near unexpected token `&&'
/home/ecliptux/bin/savelinux: line 34: `        && "$reponse" -ne "2" '


J'ai lu pas mal de doc sur les boucles IF etc.... mais j'ai du mal à trouver la syntaxe exacte dans le cas de tests multiples. Mais peut-être y a t'il une manière plus élégante de coder cette étape :/


Message édité par ecliptux le 21-11-2004 à 14:52:11

---------------
Il existe mille manières d'agir, et une seule de ne rien faire.
Reply

Marsh Posté le 21-11-2004 à 14:24:10   

Reply

Marsh Posté le 21-11-2004 à 15:14:29    

c'est -a le ET dans les [ ]
 
[ bidule -ne machin -a chose -gt truc ] par exemple
 
regarde de la doc sur select aussi, c'est sympa pour les menus


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

Marsh Posté le 21-11-2004 à 17:22:30    

Merci Zaib3k :)
j'ai remplacé les && par des -a mais je me retrouve de nouveau sur un os au niveau su case qd je lance le script :

Citation :

'home/ecliptux/bin/savelinux: line 46: syntax error near unexpected token `in
'home/ecliptux/bin/savelinux: line 46: `   case $reponse in


---------------
Il existe mille manières d'agir, et une seule de ne rien faire.
Reply

Marsh Posté le 21-11-2004 à 17:30:00    

regarde le select, c'est vraiment plus cool :)
http://www.tldp.org/LDP/abs/html/testbranch.html
 
j'essairais peut etre de voir ca plus tard sinon ;)


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

Marsh Posté le 21-11-2004 à 17:41:52    

c'est mal foutu ton truc. reprend le de 0 en le réflechissant un peu. un fois quelques trucs corrigés, ca boucle ;)


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

Marsh Posté le 21-11-2004 à 17:56:03    

Code :
  1. #!/bin/bash
  2. PS3="choix ? "
  3. select reponse in "sauvegarde manuelle de evolution.tar.bz2" "sauvegarde manuelle de ecliptux.tar.bz2" "sauvegarde manuelle de etc.tar.bz2" "quitter"
  4. do
  5. case $REPLY in
  6.  4)
  7.   exit;;
  8.  *)
  9.   echo $reponse;;
  10. esac
  11. done


 
c'est pas plus simple un truc ds le genre ?


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

Marsh Posté le 22-11-2004 à 20:10:10    

Merci pour tes conseils Zaib3k :)
Je n'ai pas trop de temps de m'y replonger là, mais je vais étudier tes pistes prochainement :)


---------------
Il existe mille manières d'agir, et une seule de ne rien faire.
Reply

Marsh Posté le 24-11-2004 à 11:19:39    

Zaib3k a écrit :

regarde le select, c'est vraiment plus cool :)
http://www.tldp.org/LDP/abs/html/testbranch.html


Bon j'ai utilisé un des script de ce site et ça fonctionne :)
Il reste bien sûr à le fignoler mais là je n'ai pas trop le temps.
En tout cas merci :)

#!/bin/bash
# tiré du site http://www.tldp.org/LDP/abs/html/testbranch.html
 
# Crude address database
 
   echo "==================="
   echo "Sauvegarde Spheerys"
   echo "==================="
   echo ""
   echo " 1 - simple compression des donnees dans /sauvelinux"
   echo "     a) sauvegarde manuelle de evolution.tar.bz2"
   echo "     b) sauvegarde manuelle de ecliptux.tar.bz2"
   echo "     c) sauvegarde manuelle de etc.tar.bz2"
   echo "     d) sauvegarde manuelle de root.tar.bz2"
   echo " 2 - compression dans /sauvelinux + delocalisation /mnt/sauvelinux"
   echo " 3 - delocalisation de la sauvegarde dans /mnt/sauvelinux"
   echo " 4 - realisation d'une iso dans /sauvelinux"
   echo " 5 - gravage de l'iso dans /media/cdrom0"
   echo " q - quitter"
   echo ""
   echo "Choix : "
read reponse
 
case "$reponse" in
# Note variable is quoted.
 
  "1" )  
  echo "Choix 1"
  ;;
 
  "2" )  
  echo "Choix 2"
  ;;
 
  "3" )  
  echo "Choix 3"
  ;;
 
  "4" )  
  echo "Choix 4"
  ;;
 
  "5" )  
  echo "Choix 4"
  ;;
 
  "q" | "Q" )  
  echo "Au revoir...."
  ;;
 
  "a" )  
  echo "Choix a"
  ;;
 
  "b" )  
  echo "Choix b"
  ;;
 
  "c" )  
  echo "Choix c"
  ;;
 
  "d" )  
  echo "Choix d"
  ;;
 
    * )
   # Default option.    
   # Empty input (hitting RETURN) fits here, too.
   echo
   echo "mauvais choix"
  ;;
 
esac
echo
 
#  Exercise:
#  --------
#  Change the script so it accepts continuous input,
#+ instead of terminating after displaying just one address.
 
exit 0


---------------
Il existe mille manières d'agir, et une seule de ne rien faire.
Reply

Sujets relatifs:

Leave a Replay

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