C shell (sh): question a 1Euro: comment incrementer une valeur?

C shell (sh): question a 1Euro: comment incrementer une valeur? - Shell/Batch - Programmation

Marsh Posté le 13-05-2004 à 09:59:08    

coucou!
 
je suis en train de faire une petit script en C-shell avec une boucle while mais quand j'incremente mon compteur, ca ne marche pas :cry:
voila ma boucle:
j=1
eps=0.000001
while [ $j -le 10 ];
do
  echo $eps >> parametre.dat
  ./ALI < parametre.dat
  j=j+1
  eps=eps*10    
done  
 
il ne comprend pas j=j+1 et il m'ecrit "eps*10" dans mon fichier au lieu de la valeur numerique de eps*10. Quelle est la bonne syntaxe, svp?
merci!!

Reply

Marsh Posté le 13-05-2004 à 09:59:08   

Reply

Marsh Posté le 13-05-2004 à 10:42:21    

je crois ke tu devré essayé $j=$j+1 voilaaa

Reply

Marsh Posté le 13-05-2004 à 11:15:29    

j'ai deja essaye mais j'ai in message d'erreur:
pour $j=$j+1 j'ai " 1=1+1 : commande not found "  
et pour $eps=$eps*10 j'ai "0.000001*10 : command not found "
 
en fait, il ne fait pas le calcul, il recupere juste l'expression....

Reply

Marsh Posté le 13-05-2004 à 11:23:01    

man bash me dit:

Citation :


   Évaluation Arithmétique
       L'évaluation arithmétique permet de remplacer une expression par le résultat de son évaluation. Il existe deux for-
       mats d'évaluation arithmétique :
 
              $[expression]
 
              $((expression))
 
       L'expression  est manipulée de la même manière que si elle se trouvait entre guillemets, mais un guillemet se trou-
       vant entre les crochets ou les parenthèses n'est pas traité spécifiquement.  Tous les mots de  l'expression  subis-
       sent  le  développement  des  paramètres,  la  substitution  des  commandes  et  la  suppression des apostrophes et
       guillemets. Les évaluations arithmétiques peuvent être imbriquées.
 
       L'évaluation est effectuée en suivant les règles mentionnées dans le paragraphe CALCUL ARITHMÉTIQUE (plus bas).  Si
       l'expression est invalide, bash affiche un message indiquant l'erreur, et aucune substitution n'a lieu.
 

Reply

Marsh Posté le 13-05-2004 à 11:37:15    

j'ai aussi essaye:
 
j=$j+1 :  il comprend j= "1+1" donc il ne recupere que  
          l'expression
 
j=${j+1} : il ignore l'expression
 
${j=j+1} : il comprend "1" tout le temps
 
voila ou j'en suis... :cry:

Reply

Marsh Posté le 13-05-2004 à 11:40:19    

t'es sûr d'avoir vraiment lu ce que j'ai collé ici? :heink:
j'ai pas parlé d'accolades mais de crochets ou de double parenthèses
 
$j=$[j+1]
 
tu le tapes sous la console ça marche ça:

Citation :


$> j=1; echo $[j+1]
2


Reply

Marsh Posté le 13-05-2004 à 11:54:37    

desolee, je suis bigleuse, hihi.  
euh, voila ce que j'ai sur ma console:
$>j=1; echo $[j+1]
1
 
ca ne marche pas...

Reply

Marsh Posté le 13-05-2004 à 12:00:33    

dans mon script, j'ai essaye $j=$[j+1] et ca comprend 1=2 donc il n'en veut pas.  
 
Si j'essaye j=$[j+1] la ca marche bien!!
 
En revanche, pour eps=$[eps*10] ca ne marche pas:il met syntax error.  
L'operateur multiplication, c'est bien <*> ?
(a cq iteration, je veux multiplier eps par 10 et eps n'est pas un entier)

Reply

Marsh Posté le 13-05-2004 à 17:23:40    

cassiopee31 a écrit :

dans mon script, j'ai essaye $j=$[j+1] et ca comprend 1=2 donc il n'en veut pas.  
 
Si j'essaye j=$[j+1] la ca marche bien!!
 
En revanche, pour eps=$[eps*10] ca ne marche pas:il met syntax error.  
L'operateur multiplication, c'est bien <*> ?
(a cq iteration, je veux multiplier eps par 10 et eps n'est pas un entier)


 
Utilise expr :

Code :
  1. j=`expr $j + 1`
  2. eps=`expr $eps * 10`


Message édité par Grululu le 14-05-2004 à 10:11:47
Reply

Marsh Posté le 14-05-2004 à 00:46:56    

En tout cas man bash est clairement la dernière chose à faire puisqu'ici on parle de csh.

Reply

Marsh Posté le 14-05-2004 à 00:46:56   

Reply

Marsh Posté le 14-05-2004 à 13:52:42    

merci pour les infos, les gars ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed