Jump to content
Sign in to follow this  
snwoman49

Problème script sh

Rate this topic

Recommended Posts

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

Share this post


Link to post
Share on other sites

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 ...

Share this post


Link to post
Share on other sites

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

Edited by beal2912

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 :)

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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.

:)

Share this post


Link to post
Share on other sites

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.

:)

Share this post


Link to post
Share on other sites

Hum, peut etre y a-t-il un timeout sur les cron ...

Les implementations de CRON d'un OS a l'autre change beaucoup.

man cron sera ton ami ...

Share this post


Link to post
Share on other sites

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 :)

Share this post


Link to post
Share on other sites

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 ;)

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

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.

:)

Share this post


Link to post
Share on other sites

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.

:)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...