Messages d'eereurs en shell

Fermé
Shargat - 30 janv. 2008 à 16:03
 Shargat - 31 janv. 2008 à 15:12
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.

26 réponses

Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:06
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
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 vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:16
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
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 vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:18
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
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 vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:21
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
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 vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:28
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
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 vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:31
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 vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
30 janv. 2008 à 16:37
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
Je suis en train de reconsidérer tout l'algorithme.
Merci encore je te tiens au courant.
0
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 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 10 février 2008
30 janv. 2008 à 19:23
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 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 10 février 2008
30 janv. 2008 à 20:19
Okay.
Merci beaucoup.
Je m'occupe de ça.
0
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
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
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
31 janv. 2008 à 14:03
Est-ce qu'on peut avoir un aperçu de ce que contient "ventesJour.txt"...
0
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
31 janv. 2008 à 14:21
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