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.
A voir également:

26 réponses

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
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
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
Shargat
 
Je pense que l'erreur vient d'autre part mais je voudrais savoir quelle type d'erreur provoque ce message d'erreur.
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
Shargat
 
Ah oui d'accord merci en effet.
Malgré la correction, le message d'erreur reste le même...
0
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
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
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
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
Shargat
 
Je suis en train de reconsidérer tout l'algorithme.
Merci encore je te tiens au courant.
0
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
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
Shargat Messages postés 4 Statut Membre
 
Okay.
Merci beaucoup.
Je m'occupe de ça.
0
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
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Est-ce qu'on peut avoir un aperçu de ce que contient "ventesJour.txt"...
0
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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