Se connecter / S'enregistrer

Résolu Pouvez-vous me donner un coup de main en Bash ?

Solutions (1)
Tags :
  • Archivage
  • Compression
  • Bash
  • Programmation
|
Bonjour a tous et a toutes.
Voici mon code, il marche très bien.
Seulement je voudrais pouvoir le raccourcir en y ajoutant deux fonctions, seulement erreur..
Quelqu'un voit ce qui ne va pas ?

  1. #!/bin/bash
  2. clear
  3.  
  4. name=$1
  5. shift
  6.  
  7. ## (a) tar c vf fichier.tar motif pour archiver
  8. ## (d) tar x vf fichier.tar pour dé-archiver
  9. ## (c) tar cz vf fichier.tar.gz motif pour archiver et compresser
  10. ## (x) tar xz vf fichier.tar.gz pour décompresser et extraire.
  11.  
  12. for i in $#
  13. do
  14. getopts acdx OPTION
  15. if [ $OPTION == 'a' ];then
  16. shift
  17. if [ $1 == '-c' ];then
  18. shift
  19. tar czvf $name.tar.gz $*
  20. echo "Archivage et Compression réussi"
  21. exit
  22. else
  23. tar cvf $name.tar $*
  24. echo "Archivage Réussi"
  25. fi
  26. fi
  27.  
  28. if [ $OPTION == 'd' ];then
  29. shift
  30. if [ $1 == '-x' ];then
  31. shift
  32. tar xzvf $name.tar.gz
  33. echo "Décompression et Exctraction réussi"
  34. exit
  35. else
  36. tar xvf $name.tar
  37. echo "Extraction réussi"
  38. fi
  39. fi
  40. done


Voila le code bon.

Maintenant voici celui qui bug ^^ :


  1. #!/bin/bash
  2. clear
  3.  
  4. ## (a) tar c vf fichier.tar motif pour archiver
  5. ## (d) tar x vf fichier.tar pour dé-archiver
  6. ## (c) tar cz vf fichier.tar.gz motif pour archiver et compresser
  7. ## (x) tar xz vf fichier.tar.gz pour décompresser et extraire.
  8.  
  9. name=$1
  10. shift
  11.  
  12. function fct1
  13. {
  14. shift
  15. if [ $1 == '-c' ];then
  16. shift
  17. tar czvf $name.tar.gz $*
  18. echo "Archivage et Compression réussi"
  19. exit
  20. else
  21. tar cvf $name.tar $*
  22. echo "Archivage Réussi"
  23. fi
  24. }
  25.  
  26. function fct2
  27. {
  28. shift
  29. if [ $1 == '-x' ];then
  30. shift
  31. tar xzvf $name.tar.gz
  32. echo "Décompression et Exctraction réussi"
  33. exit
  34. else
  35. tar xvf $name.tar
  36. echo "Extraction réussi"
  37. fi
  38. }
  39.  
  40. for i in $#
  41. do
  42. getopts acdx OPTION
  43. if [ $OPTION == 'a' ];then
  44. fct1()
  45. fi
  46. if [ $OPTION == 'd' ];then
  47. fct2()
  48. fi
  49. done


Quelqu'un peux m'aider ?


Grace a l'aide de CRicky,
voila la solution !

  1. #!/bin/bash
  2. clear
  3.  
  4. ## (a) tar c vf fichier.tar motif pour archiver
  5. ## (d) tar x vf fichier.tar pour dé-archiver
  6. ## (c) tar cz vf fichier.tar.gz motif pour archiver et compresser
  7. ## (x) tar xz vf fichier.tar.gz pour décompresser et extraire.
  8.  
  9. function fct1
  10. {
  11. shift
  12. if [ $1 == '-c' ];then
  13. shift
  14. tar czvf $name.tar.gz $*
  15. echo "Archivage et Compression réussi"
  16. exit
  17. else
  18. tar cvf $name.tar $*
  19. echo "Archivage Réussi"
  20. fi
  21. }
  22.  
  23. function fct2
  24. {
  25. shift
  26. if [ $1 == '-x' ];then
  27. shift
  28. tar xzvf $name.tar.gz
  29. echo "Décompression et Exctraction réussi"
  30. exit
  31. else
  32. tar xvf $name.tar
  33. echo "Extraction réussi"
  34. fi
  35. }
  36.  
  37. name=$1
  38. shift
  39. for i in $#
  40. do
  41. getopts acdx OPTION
  42. if [ $OPTION == 'a' ];then
  43. fct1 $*
  44. fi
  45.  
  46. if [ $OPTION == 'd' ];then
  47. fct2 $*
  48. fi
  49. done
  • Meuniers a édité ce message
  • cless58 a édité ce message
  • cless58 a édité ce message
  • cless58 a édité ce message
  • cless58 a édité ce message
  • cless58 a édité ce message
Contenus similaires
Meilleure solution
partage
|
Je pense que c'est parce que tu utilise shift et $1 dans ta fonction.
Dans une fonction le $1 correspond au paramètre de la fonction. Or, tu ne passe aucun paramètre à ta fonction, donc il ne se passe probablement rien.

Donc, à ta place, j'appellerai fct1($1), et en mettant les shift en dehors de la fonction (bref pas de gestion des paramètres de ligne de commande dans la fonction).
  • cless58 a sélectionné cette solution comme la meilleure réponse
  • Commenter cette solution |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS