Aller au contenu

Sujets conseillés

Posté

Bonjour à tous,

Je viens de finir l'écriture d'un script sh, je rencontre quelques problèmes.

Tout d'abord ce message d'erreur :

syntax error in expression (error token is ".5")

Ensuite la boucle ne s'effectue qu'une fois (elle me crée donc un seul fichier)

Enfin cette ligne là degrib test.grb latitude_$latdep_longitude_$longdep_$i qui devrait me crée un fichier du type latitude_40_longitude_-5_1 me crée un fichier du type latitude_03

Quelques problèmes donc.

Ci-dessous le script sh.

Merci d'avance.

Amicalement :)

#!/bin/sh
# time de 03 à 180
# lat latitude
# long longitude

#temps de départ
i=03

#latitude départ (lat_dep)
latdep=0

#longitude départ (long_dep)
longdep=-70

#time
while [ $i -le 180 ]
do



#latitude
while [ $latdep -le 90 ]
do

#longitude
while [ $longdep -le 70 ]
do

degrib test.grb latitude_$latdep_longitude_$longdep_$i


longdep=$[$longdep+0.5]

done

latdep=$[$latdep+0.5]
done


i=$[$i+03]
done

exit 0

Posté

Hum, je ne connais pas ta syntaxe

$[...]
. De mon cote, pour faire des calculs en shell j'utilise
$(( ... ))

qui fait parti des spec POSIX.

Ensuite ... es-tu sure que ton shell est capable des faire des calcul en flottant ?

Certaines versions ne supportent que les calculs sur les entiers.

Apres, il y a peut etre une erreur logique dans ton script mais je n'ai pas le temps de regarder pour le moment ...

Posté (modifié)

Moi j'aurai écris ça de cette manière :

#!/bin/sh
# time de 03 à 180
# lat latitude
# long longitude

#temps de départ
i=3

#latitude départ (lat_dep)
latdep=0

#longitude départ (long_dep)
longdep=-70

#time
while [ $i -le 180 ]
do



#latitude
while [ $latdep -le 90 ]
do

#longitude
while [ $longdep -le 70 ]
do

degrib test.grb "latitude_${latdep}_longitude_{$longdep}_${i}"


$longdep=$longdep+0.5

done

$latdep=$latdep+0.5
done


$i=$i+3
done

exit 0

mais il est fortement possible qu'il y ai encore des erreurs

je te conseille de faire des

echo $i
echo $latdep
echo $longdep

pour voir comment se comporte tes variables au fur et mesure de l'execution du sh

Modifié par beal2912
Posté

Re Bonjour,

Tout d'abord merci pour vos réponses :) .

Il persiste 2 problèmes :

- Le +0.5 ne marche pas (mais le +1 si)

- Il n'y qu'une boucle qui se fait (les 2 autres ne se lancent qu'une fois) (boucle 3 qui se lance).

Voici le code modifié grâçe à vous :

#!/bin/sh
# time de 03 à 180
# lat latitude
# long longitude

#temps de départ
i=03

#latitude départ (lat_dep)
latdep=20

#longitude départ (long_dep)
longdep=-5

#time
while [ $i -le 180 ]
do



#latitude
while [ $latdep -le 25 ]
do

#longitude
while [ $longdep -le 0 ]
do

degrib test.grb latitude_${latdep}_longitude_${longdep}_${i}"

echo $i
echo $longdep
echo $latdep


longdep=$(( $longdep + 1 ))

done

latdep=$(( $latdep + 1 ))
done


i=$(( $i + 03))
done

exit 0

Posté

Si le .5 ne passe pas => que des entiers.

Maintenant, la question est de savoir si les entiers signes passent.

Bref, pour eviter toute insertitude, essaie un

echo $(( -5 + 1 ))

et tu aura directement la reponse.

PS: au lieu de mettre /bin/sh, utilise pluto ksh ou bash car je ne suis pas sur que tous ce que tu utilises passe sur un vrais sh.

Posté

Bonjour,

Avec .5 ca ne marche pas , pourtant il faut impérativement que j'utilise le .5 .

Pour les boucles idem, elles ne se font pas (sauf la dernière).

Voilà.

Amicalement :)

Posté
Pour les boucles idem, elles ne se font pas (sauf la dernière).

T'as essaye mon echo ? Ca donne quoi comme resultat ?

Avec .5 ca ne marche pas , pourtant il faut impérativement que j'utilise le .5 .

Ben, soit tu multiplie tout par 10 et du divise au moment de passer l'argument ou dans le programme que tu appele, soit tu utilises un autre langage de batch que sh. Par exemple, tout mes batch sont en php mais tu as aussi la possibilite d'utiliser perl ou python. Il y a meme des versions simplifier du basic qui existe en ligne de commande pour Unix et qui font aussi de bon batch.

  • 3 semaines plus tard...
Posté

Bonjour,

Je fais remonter ce topic car je rencontre un problème avec la commande exec();

Mes scripts ne s'executent pas jusqu'au bou (certains durent 2h).

Y a t'il une configuration spéciale à mettre dans le php.ini ?

Comment remédier à cela ?

Merci d'avance et bonne journée.

:)

Posté

Bonjour,

J'utilise déjà cette fonction et cela ne vient pas de ça.

En fet quand je lance le cron du programme PHP moi même ca marche, mais quand il est en cron et qu'il doit se lancer et s'executer soit même ca ne marche pas (pas jusqu'au bou) !

Quand je le lance en ligne de commande via SSH ca marche parfaitement aussi.

Merci pour ton aide en tout cas.

:)

Posté

Salut,

Je ne pense pas que ca vient du système cron de l'OS Gentoo, puisque j'ai un script SH de backup qui dure plusieurs heures et qui ne s'arrête pas.

Je pense que ca vient du PHP.ini, Memory Limit ou tout autre "truc" qui limite la consomnation des scripts.

Je vais rechercher ça.

Bonne journée :)

Posté

Il est possible dans ce cas que tu aies un message d'erreur dans le log du serveur. Je ne sais pas si tu es sur dédié, mais dans l'affirmative cela ne serait pas très difficile de trouver la raison ;)

Posté

Regarde dans le php.ini de ce coté là :

;;;;;;;;;;;;;;;;;;;
; Resource Limits;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60; Maximum amount of time each script may spend parsing request data
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)

Posté

Bonjour,

J'ai modifié les paramètres dans le php.ini, on verra ce que ca donnera demain matin.

Sinon pour répondre à Dan oui je suis sur un dédié chez OVH, sous gentoo.

:)

  • 3 semaines plus tard...
Posté

Bonsoir,

Je rencontre toujours les mêmes problèmes même en mettant le php.ini au max.

De quel log parles tu Dan pour trouver l'erreur (je suis sous gentoo sur un dédié ovh) ?

Merci d'avance et bonne soirée.

:)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...