Messages d'eereurs en shell

Shargat -  
 Shargat -
Bnjour

Voilà, j'ai réalisé un script .sh en shell donc.
Lorsque je lance ma commande, j'obtiens un deux messages d'erreurs sur deux lignes différentes:

./dm.sh : line 60 unexpected EOF while looking for matching ``,
./dm.sh : line 70 : syntax error : unexpected end of file

Ma ligne 60 correspond à ceci:

echo "`head -$i ficIntermediaire | tail -i ficIntermediaire | cut -1,2,3 -d ";"` $quantiteTotale $montant"

et la ligne 72 n'est que la fin de mon script qui se termine par
exit 0.

J'ai du mal à décrypter les erreurs concernée, alors si qqn peut m'aideR.
Merci d'avance.
Configuration: Linux Debian
Mozilla 1.8.1.10

26 réponses

  • 1
  • 2
  1. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
     
    Bonjour,
    il manque un $ dans le tail ?
    et pourquoi spécifie un fichier dans le tail ?, il prends ce que lui donne le pipe en entrée non ?

    --
    Tøƒ
    0
  2. Shargat
     
    Ah oui exact merci.
    J'ai corrigé et j'obtiens toujours la même phrase d'erreur.

    Mon code est celui-ci:

    echo `head -$i ficIntermediaire | tail -$i |cut -1,2,3 -d ";"` $quantiteTotale $montant

    Sinon pour la fin de fichier, faut-il finir un script shell par une instruction spéciale autre que exit 0 ?
    0
  3. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
     
    une autre remarque, pourquoi tu fais tail -$i ?
    je suppose qu'en fait, tu veux récupérer la ièeme ligne, donc c'ets un tail -1 qu'il faut faire.
    Ton problème vient peut-être également de là car ta commande renvoie plusieur lignes

    --
    Tøƒ
    0
  4. Shargat
     
    Je pense que l'erreur vient d'autre part mais je voudrais savoir quelle type d'erreur provoque ce message d'erreur.
    0
    1. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
       
      Je pense que le message est levé car la commande echo ne s'effectue pas correctement.

      --
      Tøƒ
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Shargat
     
    EN fait ce i est l'indice d'une boucle for.
    Le but de cette commande est d'extraire les champs 1, 2, 3 de la ième ligne d'un fichier.
    Donc à chaque tour de boucle le i est différent. Mais à chaque fois le résultat n'est qu'une ligne non?
    0
    1. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
       
      si tu fais head-$i, tu vas prendre les i première lignes
      ensuite le tail -1 va prendre la dernière ligne issues du head.
      l'argument du tail correspond aux nombres de lignes en partant de la fin que l'on conserve.
      --
      Tøƒ
      0
  7. Shargat
     
    Ah oui d'accord merci en effet.
    Malgré la correction, le message d'erreur reste le même...
    0
  8. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
     
    As-tu tester ta ligne head -$i ficIntermediaire | tail -$i |cut -1,2,3 -d ";" dans un xterm ?
    en remplacant le i par 1?
    je l'ai fait vite fait, et je pense que tu as oublier le -f devant -1 dans le cut

    --
    Tøƒ
    0
  9. Shargat
     
    Oui je viens de m'en apercevoir en effectuant ce test.
    Après correction, la commande fonctionne et le message d'erreur reste toujours le même lorsque j'exécute le script.
    0
  10. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
     
    J'ai écrit un script il n'y pas longtemps qui utilise exactement cette fonction
    je recherche ca et je te tiens au courant.

    --
    Tøƒ
    0
  11. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
     
    Je ne vois pas trop d edifférence avec le mien...
    Que se passe t'il si tu mets juste head -$i ficIntermediaire | tail -$i |cut -1,2,3 -d ";" dans ton script, avant le echo par exemple ?

    --
    Tøƒ
    0
  12. Shargat
     
    Je suis en train de reconsidérer tout l'algorithme.
    Merci encore je te tiens au courant.
    0
  13. Shargat
     
    Bon voilà j'ai réécrit un script tout propre. Le message d'erreur reste le même.
    IL s'agirait d'un oubli de fermeture de `, de " ou d'autre chose.

    Je me permets de poster le script entier, si quelqu'un voulait bien le tester chez lui pour voir s'il a le même message d'erreur.

    Merci d'avance.
    Ce script fait le bilan des ventes de tous les produits d'un magasin.

    #! /bin/sh
    #création de la variable qui contiendra la date courante
    
    date_du_jour=`date +"%D`
    
    
    #création du fichier ventesdate_du_jour.txt
    
    touch ventes$date_du_jour.txt
    
    
    
    
    #écriture des deux premières lignes dans le fichier
    
    echo "Etat des ventes du $date_du_jour" >>ventes$date_du_jour.txt
    
    echo "Reference	NomProduit  Prix  Quantite  Montant" >>ventes$date_du_jour
    
    
    k=0
    j=0
    tailleTableau=0
    
    #pour i de a nbligneTotal
    nbLigneTotal=`wc -l ventesJour.txt`
    while [ i -le nbLigneTotal ]
    do 
    	#regouper ds chaque variable les noms prix
    	reference=`head -$i ventesJour.txt | cut -f1 -d ";"`
    	#verifier reference pas deja prise
    	#tant que pas trouve dans tableau faire
    	while [ tableau[j] -ne $reference ] || [ $j -lt tailleTableau ]
    	do
    		let j=$j+1
    	done
    	#si  j=tailleTableau alors pas trouve et on traite
    	if [ $g -eq $tailleTableau ]
    	then 
    	
    	
    		nomProduit=`head -$i ventesJours.txt | cut -f2 -d ";"`
    		prix=`head -$i ventesJour.txt | cut -f3 -d ";"`
    
    
    		#regrouper lignes meme produit 
    		quantite=`grep $reference ventesJour.txt | wc -l`
    
    		#calcul de montant
    		let montant=$quantite*$prix
    		tableau[k]=$reference
    		let tailleTableau=$tailletableau+1
    		let montantTotal=$montantTotal+$montant
    		#ecriture de la ligne
    		echo $reference     $nomProduit     $prix     $quantite     $montant
    
    		
    	fi
    	
    	#sinon alors trouve donc on fait rien
    	let i=$i+1
    done
    
    #écrire Montant total des ventes du jour : $montantTotal
    
    echo "Montant total des ventes du jour :" $montantTotal
    
    exit 0
    0
  14. Shargat Messages postés 4 Statut Membre
     
    personne ? C'est surement une erreur toute bête de fermeture de balise mais j'ai beau tout relire je vois pas. Quelqu'un arrive à exécuter?
    Merci d'avance
    0
  15. Shargat Messages postés 4 Statut Membre
     
    Okay.
    Merci beaucoup.
    Je m'occupe de ça.
    0
  16. Shargat
     
    J'ai changé tout ça et même quelques autres trucs, toujours le même message d'erreur.
    C'est la première fois que j'utilise les tableaux en shell peut-être les ai-je mal utilisés...
    Le nouveau script:

    ##!/bin/dm2
    #création de la variable qui contiendra la date courante
    date_du_jour=`date +"%D`
    
    
    #création du fichier ventesdate_du_jour.txt
    touch ventes$date_du_jour.txt
    
    
    #écriture des deux premières lignes dans le fichier
    echo "Etat des ventes du $date_du_jour" >> ventes$date_du_jour.txt
    echo "Reference	NomProduit  Prix  Quantite  Montant" >> ventes$date_du_jour
    
    #initialisation des vraiables
    k=0
    j=0
    i=0
    montantTotal=0
    
    #pour i de 1 a nbligneTotal
    nbLigneTotal=`cat ventesJour.txt | wc -l`
    while [ $i -le $nbLigneTotal ]
    do 
    	#regouper dans chaque variable les noms prix
    	reference=`head -$i ventesJour.txt | cut -f1 -d ";"`
    	#verifier reference pas deja prise
    	#tant que pas trouve dans tableau faire
    	while [ $tableau[j] -ne $reference ] || [ $j -lt $k ]
    	do
    		let j=$j+1
    	done
    	#si  j=tailleTableau alors pas trouve et on traite
    	if [ $j -eq $k ]
    	then 
    	
    	
    		nomProduit=`head -$i ventesJours.txt | cut -f2 -d ";"`
    		prix=`head -$i ventesJour.txt | cut -f3 -d ";"`
    
    
    		#regrouper lignes meme produit 
    		quantite=`grep $reference ventesJour.txt | wc -l`
    
    		#calcul de montant
    		let montant=$quantite*$prix
    		tableau[k]=$reference
    		let k=$k+1
    		let montantTotal=$montantTotal+$montant
    		#ecriture de la ligne
    		echo $reference     $nomProduit     $prix     $quantite     $montant
    
    		
    	fi
    	
    	#sinon alors trouve donc on fait rien
    	let i=$i+1
    done
    
    #écrire Montant total des ventes du jour : $montantTotal
    echo "Montant total des ventes du jour : $montantTotal"
    
    exit 0
    0
  17. Shargat
     
    Attendez une seconde, un **** de guillemet était dans la création de la variable date_du_jour.
    L'exécution m'affiche des messages d'erreurs plus explicites maintenant je vais les traiter et voir ce ça donne.
    Je vous tiens au courant.
    Merci.
    0
  18. Shargat
     
    Bon voilà plus qu'une erreur qui je pense doit être lié à ma syntaxe sur l'utilisation du tableau.
    Voici le message d'erreur:

    ./dm3.sh: line 28: [: [0]: unary operator expected

    Peut-être que c'est parce que je n'ai pas initialisé la première case du tableau...
    Quelqu'un a une idée?
    Je remets le script en ciblant la ligne erreur:

    #!/bin/dm2
    #création de la variable qui contiendra la date courante
    date_du_jour=`date +%D`
    
    
    #création du fichier ventesdate_du_jour.txt
    touch ventes_de_ce_jour.txt
    
    
    #écriture des deux premières lignes dans le fichier
    echo "Etat des ventes du $date_du_jour" >> ventes_de_ce_jour.txt
    echo "Reference	NomProduit  Prix  Quantite  Montant" >> ventes_de_ce_jour.txt
    
    #initialisation des vraiables
    k=0
    j=0
    i=0
    montantTotal=0
    
    #pour i de 1 a nbligneTotal
    nbLigneTotal=`cat ventesJour.txt | wc -l`
    while [ $i -le $nbLigneTotal ]
    do 
    	#regouper dans chaque variable les noms prix
    	reference=`head -$i ventesJour.txt | cut -f1 -d';'`
    	#verifier reference pas deja prise
    	#tant que pas trouve dans tableau faire
    	while [ $tableau[$j] -ne $reference ] || [ $j -lt $k ]     <------------------------
    	do
    		let j=$j+1
    	done
    	#si  j=tailleTableau alors pas trouve et on traite
    	if [ $j -eq $k ]
    	then 
    	
    	
    		nomProduit=`head -$i ventesJour.txt | cut -f2 -d ";"`
    		prix=`head -$i ventesJour.txt | cut -f3 -d';'`
    
    
    		#regrouper lignes meme produit 
    		quantite=`grep $reference ventesJour.txt | wc -l`
    
    		#calcul de montant
    		let montant=$quantite*$prix
    		tableau[$k]=$reference
    		let k=$k+1
    		let montantTotal=$montantTotal+$montant
    		#ecriture de la ligne
    		echo "$reference     $nomProduit     $prix     $quantite     $montant" >> ventes_de_ce_jour.txt
    
    		
    	fi
    	
    	#sinon alors trouve donc on fait rien
    	let i=$i+1
    done
    
    #écrire Montant total des ventes du jour : $montantTotal
    echo "Montant total des ventes du jour : $montantTotal" >> ventes_de_ce_jour.txt
    
    exit 0
    0
  19. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Est-ce qu'on peut avoir un aperçu de ce que contient "ventesJour.txt"...
    0
  20. Shargat
     
    Bien sûr:

    Ref;nomProduit;prix;qté

    8447457;Lot 10 Chemises;7;5
    8439991;Classeur levier;6;2
    8402060;Perforateur;3;1
    8404572;Gomme plastique;1;4
    8419837;Ciseaux Soft;5;1
    8445115;Papier 500 f.;7;2
    8428563;Etiquettes A4;8;1
    8453333;Cahier A4 96p.;4;5
    8453334;Cahier A4 192p.;5;4
    8404572;Gomme plastique;1;3
    8456422;Roller bleu;2;5
    8456423;Roller rouge;2;2
    8441139;Surligneur vert;1;3
    401797;Marqueur noir;1;1
    8434996;Correcteur;1;6
    8447457;Lot 10 Chemises;7;7
    8439991;Classeur levier;6;2
    8439991;Classeur levier;6;2
    8402060;Perforateur;3;1
    8453333;Cahier A4 96p.;4;10
    8419837;Ciseaux Soft;5;10
    8456422;Roller bleu;2;2
    8456422;Roller bleu;2;3
    8456423;Roller rouge;2;5
    8434996;Correcteur;1;2
    8447457;Lot 10 Chemises;7;5
    8445115;Papier 500 f.;7;1
    8453333;Cahier A4 96p.;4;6
    8456422;Roller bleu;2;1
    8434996;Correcteur;1;3
    0
  21. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Bon déjà la syntaxe de la lecture d'un élément du tableau s'écrit plutôt comme ça "${tableau[$j]}".

    Ensuite, il vaudrait mieux je pense que tu nous donnes l'algorithme de ton script, parce que là c'est assez fiddicile à comprendre (du moins pour ma part) ;-(

    ;-))
    0
  • 1
  • 2