Noobshell : c'est quoi mon erreur?

Noobshell : c'est quoi mon erreur? - Shell/Batch - Programmation

Marsh Posté le 02-06-2014 à 22:38:47    

Bon,
 
J'aurais besoin de vos lumières car je me casse la tête sur un script sans savoir quelle est mon problème,...faut dire je débute le shell depuis deux jours.
 

Code :
  1. #!/bin/bash
  2. echo "Entrez le nom du premier fichier : "
  3. read fichier1
  4. if  [ ! -f $fichier1 ] ; then
  5. echo "Le fichier1 n'existe pas"
  6. exit
  7. fi
  8. echo "Entree le nom du second fichier : "
  9. read fichier2
  10. if [ ! -f $fichier2 ] ; then
  11. echo "Le fichier1 n'existe pas"
  12. exit
  13. test1=$(md5 fichier1)
  14. test2=$(md5 fichier2)
  15. if [ $test1 -eq $test2 ] ; then
  16. echo "Le md5sum à la même valeur"
  17. echo "Le checksum est : "
  18. md5 fichier1
  19. elif [ $test1 -gt $test2 ] ; then
  20. echo "Le md5sum du fichier 1 est plus grand que celui du fichier 2"
  21. md5 fichier1 fichier2
  22. else
  23. echo "Le md5sum du fichier 2 est plus grand que celui du fichier 1"
  24. md5 fichier2 fichier1
  25. fi


 
Je sais entrer le nom du premier fichier puis après probleme de synatxe à la ligne 19 avec le elif...
Mais je vois pas pq  :??:  
Merci pour votre aide.

Reply

Marsh Posté le 02-06-2014 à 22:38:47   

Reply

Marsh Posté le 02-06-2014 à 23:11:54    

Il manque juste un fi entre la ligne 12 et la ligne 13 non ?

Reply

Marsh Posté le 02-06-2014 à 23:33:09    

Ah oui déjà tiens :)

Reply

Marsh Posté le 03-06-2014 à 00:08:45    

:hello:  !

 
  • Lignes 13 et 14, il te manque aussi les $ pour tes variables $fichier1 et $fichier2
  • Ligne 11, c'est "fichier2" et non "fichier1" [:cupra]
  • Sinon, l'erreur est déclenchée à mon avis par ma première remarque : vu que les signes $ sont omis, il n'arrive pas à calculer le md5, ce qui fait que les variables $test1 et $test2 ne sont pas initialisées. Tu devrais à mon avis ajouter des doubles quotes à chacun des tests pour éviter ce type d'erreur.


:jap:

 

Edit : d'ailleurs, ça te donne pas une erreur à la ligne 15 avec le if ? :??:


Message édité par Soileh le 03-06-2014 à 00:10:20

---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 07-06-2014 à 11:52:26    

Je corrige, je teste et j'avise :jap:  
Merci beaucoup!

Reply

Marsh Posté le 07-06-2014 à 12:20:36    

Non toujours pas :pt1cable:  
Pour ceci if  [ ! -f $fichier1 ]
je devrais faire if  [ "! -f $fichier1" ]? Je ne vois pas bien ou placer ces doubles quotes j'avoue

Reply

Marsh Posté le 07-06-2014 à 12:27:57    

Identifiant non valable ligne 3
Ligne 20 erreur de syntaxe pres du elif

Message cité 1 fois
Message édité par Thaybow7 le 07-06-2014 à 12:28:25
Reply

Marsh Posté le 08-06-2014 à 11:22:11    

Thaybow7 a écrit :

Non toujours pas :pt1cable:  
Pour ceci if  [ ! -f $fichier1 ]
je devrais faire if  [ "! -f $fichier1" ]? Je ne vois pas bien ou placer ces doubles quotes j'avoue


Pour les quotes, il faut faire ceci :

Code :
  1. if [ "$test1" -eq "$test2" ]


Cela te permet de protéger le contenu de ta variable, et d'éviter les erreurs si celles-ci n'est pas valorisées :jap:
Par contre, dans ce cas d'un test sur égalité, tu dois aussi tester que la valeur n'est pas nulle [:cupra]


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 08-06-2014 à 11:57:44    

Thaybow7 a écrit :

Identifiant non valable ligne 3
Ligne 20 erreur de syntaxe pres du elif


Ta ligne 3 c'est bien cette ligne ? :??:

Code :
  1. read fichier1


Parce qu'elle est correcte normalement :??:
Et même ta ligne 20 avec le elif est correcte :/


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 09-06-2014 à 12:43:27    

Ben ouais, j'ai débuggé et j'en suis revenu au début du script avec la conclusion que la commande read chez moi à un souci.  
J'ai remarqué ça pour les autres scripts que j'ai écrit.  
 
Je comprends vraiment pas le problème.  
 
Je suis sous vmware...ça peut être la source du problème?
J'ai perdu une semaine à me prendre la tête et maintenant je suis bien à la bourre :cry:

Reply

Marsh Posté le 09-06-2014 à 12:43:27   

Reply

Marsh Posté le 09-06-2014 à 13:11:28    

Thaybow7 a écrit :

Ben ouais, j'ai débuggé et j'en suis revenu au début du script avec la conclusion que la commande read chez moi à un souci.
J'ai remarqué ça pour les autres scripts que j'ai écrit.

 

Je comprends vraiment pas le problème.

 

Je suis sous vmware...ça peut être la source du problème?
J'ai perdu une semaine à me prendre la tête et maintenant je suis bien à la bourre :cry:


Tu utilises VMWare ? Ça veut donc dire que tu émules un Linux non ? :??: Il n'y aurait pas un problème de copier-coller quelquefois entre un Windows et un Linux ? :??: Je pense surtout au niveau des sauts de lignes par exemple : j'ai écrit des scripts sous Windows que j'exécutais sous Cygwin, et je me suis rendu compte que je devais faire attention à ce détail [:cupra]

 

Edit : pour mettre en évidence ceci, fais un "cat -v" de ton script pour voir si tu n'as pas de caractères parasites ;)

Message cité 1 fois
Message édité par Soileh le 09-06-2014 à 13:12:54

---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 09-06-2014 à 13:29:16    

Pour voir ce qu'il fait et jusqu'où il va:
 

Code :
  1. bash -xv tonscript.sh

Reply

Marsh Posté le 09-06-2014 à 13:31:46    

Soileh a écrit :


Tu utilises VMWare ? Ça veut donc dire que tu émules un Linux non ? :??: Il n'y aurait pas un problème de copier-coller quelquefois entre un Windows et un Linux ? :??: Je pense surtout au niveau des sauts de lignes par exemple : j'ai écrit des scripts sous Windows que j'exécutais sous Cygwin, et je me suis rendu compte que je devais faire attention à ce détail [:cupra]
 
Edit : pour mettre en évidence ceci, fais un "cat -v" de ton script pour voir si tu n'as pas de caractères parasites ;)


 
Aussi, s'il fait des copier/coller d'un script pris sur internet ou dans un .doc sous windows, ça a probablement inséré des sauts de ligne windows.

Reply

Marsh Posté le 09-06-2014 à 14:21:52    

Pourtant je fais tout sous notepad++ en shell
Mais même le script le plus simple genre  
 
#!/bin/bash
echo "entrez le nom : "
read nom
echo $nom
 
probleme au niveau du read...

Reply

Marsh Posté le 09-06-2014 à 14:27:27    

http://s22.postimg.org/lb5ffdxkd/linuxread.jpg
^M c'est le retour linux?

Reply

Marsh Posté le 09-06-2014 à 14:36:21    

Non, Microsoft  :D

Reply

Marsh Posté le 09-06-2014 à 14:40:53    


Comme le dit tuxerman12, c'est un saut de ligne Windows ^_^
Sous Linux, si tu as la commande dos2unix, tu peux l'utiliser pour convertir ton script au format Linux ;)

 

Edit : ou sous un editeur comme vi, tu peux saisir la commande : 1,$s/^M//g


Message édité par Soileh le 09-06-2014 à 14:42:07

---------------
And in the end, the love you take is equal to the love you make
Reply

Sujets relatifs:

Leave a Replay

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