Version complète: sur le forum Webmaster Hub : Problème script sh
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Scripts et utilitaires
snwoman49
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 smile.gif

CODE
#!/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
destroyedlolo
Hum, je ne connais pas ta syntaxe
CITATION
$[...]
. De mon cote, pour faire des calculs en shell j'utilise
CODE
$(( ... ))
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 ...
beal2912
Moi j'aurai écris ça de cette manière :


CODE
#!/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
CODE
echo $i
echo $latdep
echo $longdep


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

Tout d'abord merci pour vos réponses smile.gif .

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 :

CODE
#!/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
destroyedlolo
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
CODE
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.
snwoman49
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 smile.gif
destroyedlolo
CITATION(snwoman49 @ jeudi 21 septembre 2006, 19h42) *
Pour les boucles idem, elles ne se font pas (sauf la dernière).


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

CITATION(snwoman49 @ jeudi 21 septembre 2006, 19h42) *
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.
snwoman49
Bonjour,

Je l'ai fait en php et ca marche nickel.

Merci beaucoup smile.gif
snwoman49
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.

smile.gif
NorSeb
Bonjour,

Regarde du coté de la fonction set_time_limit() ( http://fr.php.net/manual/fr/function.set-time-limit.php )
snwoman49
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.

smile.gif
destroyedlolo
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 ...
snwoman49
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 smile.gif
Dan
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 wink.gif
NorSeb
Regarde dans le php.ini de ce coté là :

CODE
;;;;;;;;;;;;;;;;;;;
; 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)
snwoman49
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.

smile.gif
snwoman49
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.

smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.