Ordre séquentiel des paramètres et séparation par des nombres

Ordre séquentiel des paramètres et séparation par des nombres - Linux et OS Alternatifs

Marsh Posté le 14-02-2004 à 03:57:51    

Est-ce qu'il y a moyen de faire cela à partir de ce script que j'essai d'écrire?
 
 
"Le numéro de paramètre" c'est (1, 2, 3, 4..., -->le nombre de $nombre rentré) et le "nombres de chiffres" c'est (1= 1 chiffre, 128= 3 chiffres) où je suis pas dans la bonne voie? Ca fait déja un bon 10h que je cherche et je ne vois vraiment pas comment faire...
 
 
 

Code :
  1. #! /bin/bash
  2. sum=0
  3. echo -e "No de parametre\t\tValeur\t\tNombre de chiffres"
  4. for int in $*
  5. do
  6. sum=$(($sum+$int))
  7. moy=$(($sum/$#))
  8. echo -e "\t\t\t$int"
  9. done
  10. #echo "$#"
  11. echo -e "\nLa somme vaut $sum "
  12. echo -e "\nLa moyenne vaut $moy"


 
 
*Je suis a veille de changer mon nick pour "Le cas désespéré qui devrait changer de branche"

Reply

Marsh Posté le 14-02-2004 à 03:57:51   

Reply

Marsh Posté le 14-02-2004 à 05:26:37    

Toi t'as une drole de façon de calculer une moyenne :D Sinon le jeu c'est de comprendre ce que tu veux faire ? Commence par expliquer en français ce que tu cherches à faire.

Reply

Marsh Posté le 14-02-2004 à 05:53:37    

Ouais bon je viens de comprendre :

#!/bin/bash
 
i=0
sum=0
 
echo -e "No de parametre\t\tValeur\t\tNombre de chiffres"
 
for int in $*
do
        (( i++ ))
        (( sum += int ))
        echo -e "${i}\t\t\t${int}\t\t${#int}"
done
 
echo -e "\nLa somme vaut ${sum}"
echo -e "La moyenne vaut $(( sum / i ))"


 
Quelques explications :

  • (( i++ )) et équivalent à i=$(( i + 1 ))
  • (( sum += int )) et équivalent à sum=$(( sum + int ))
  • ${#int} est le nombre de caractères de int
  • Remarque par rapport à ce que tu as écrit : on écrit $(( sum + int )) plutôt que $(( $sum + $int )). Dans le premier cas, sum et int sont interprétés en même temps que l'expression arithmétique, ce qui est correct. Dans le deuxième cas, num et int sont interprétés avant l'expression arithmétique, ce qui n'est pas correct (enfin ça marche en général, mais c'est moins correct). En particulier, si une des deux variables est vides, tu auras une erreur de syntaxe puisque l'expression arithmétique sera quelque chose du genre « $(( 3 + )) », qui ne veut rien dire.


PS : pour bien aligner le tableau il faudrait utiliser printf plutôt que des tabulations.
 
PS 2 : ça devrait aller dans Programmation, section Shell/Batch


Message édité par matafan le 14-02-2004 à 06:04:29
Reply

Marsh Posté le 14-02-2004 à 14:05:09    

Wow merci beaucoup. J'ai bien hâte que ca me soit aussi simple! Je comprend toujours la logique quand je le vois, mais pas quand je le fais. Ma faire quelques test avec printf, je ne savais même pas que ca existait en script shell.  
 
Entk merci encore!!
 
ps: vraiment désolé, j'était sûr de l'avoir mis dans la section programmation. Sûrement une erreur d'inattention. D'ailleurs tu y verra que j'ai déja posé beaucoup de questions dans cette section!

Reply

Sujets relatifs:

Leave a Replay

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