Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/02/2010, à 16:28

mega-jp

comptage de dossier et calcul de moyenne

Salut à tous,

Pour un cours d'informatique je doit réaliser 3 petits programmes en Shell, mais je bloque dessus, c'est pourquoi je souhaiterais un petit coup de main.

  Il faut écrire un programme nommé nbDir en shell qui calcule et imprime sur la sortie standard le nombre de répertoires d’un répertoire passé en paramètre sans utiliser d’option particulière du ls.

j'ai donc essayer avec le find :

find ~/Bureau -type d | wc -l

Mais cette commande compte aussi le nombre de sous-dossiers dans les dossiers.

Concernant le calcul de la moyenne, je suis à sec...

  – Ecrire le script Shell moyenne qui calcule la moyenne des nombres passés en paramètre.
  – Ecrire le script Shell moyenne qui calcule la moyenne des nombres contenu dans un fichier dont le nom est passé
    en paramètre.

Merci d'avance de toutes vos réponses.

Hors ligne

#2 Le 04/02/2010, à 17:16

Totor

Re : comptage de dossier et calcul de moyenne

Bonjour,

Il s'agit d'un excerice, je ne te donnerai donc pas les solutions car cela ne t'aidera pas.
Pour ta 1ere demande, consulte le man de find. Il y a ce qu'il te faut.
Pour le reste, si tu n'as pas besoin d'une précision à décimale, consulte le man du bash, section "ARITHMETIC EVALUATION". Si les décimaux sont à gérer, regarde du côté de l'outil "bc"

Cela dit, normalement tu devrais avoir toutes les réponses dans tes cours wink


-- Lucid Lynx --

Hors ligne

#3 Le 04/02/2010, à 17:35

mega-jp

Re : comptage de dossier et calcul de moyenne

Pour le comptage de dossier j'ai tester :

find ~/Bureau/* -type d -prune

mais du coup les dossiers qui contiennent des sous-dossiers ne sont pas comptés....:/

Hors ligne

#4 Le 04/02/2010, à 17:38

Totor

Re : comptage de dossier et calcul de moyenne

beeeeeeeeeeeeeeeeeeeeep
-prune = mauvaise réponse


-- Lucid Lynx --

Hors ligne

#5 Le 04/02/2010, à 17:40

mega-jp

Re : comptage de dossier et calcul de moyenne

j'ai fouiller le find jusqu'au bout mais je n'ai vu que ce début de solution

Hors ligne

#6 Le 04/02/2010, à 17:50

Totor

Re : comptage de dossier et calcul de moyenne

alors tape :
man bash
puis
/-m.{5}th

si tu ne trouves rien, oublies find...


-- Lucid Lynx --

Hors ligne

#7 Le 04/02/2010, à 17:53

sputnick

Re : comptage de dossier et calcul de moyenne

Totor, je trouve ton, attitude un max "depth" ;)

Pas besoin de find en fait.

J'ai confiance au fait que tu demande des réponses mais que tu souhaite les comprendre.

Donc, deux solutions :

printf '%s\n' */ | wc -l

x=( */ ); echo ${#x[@]}

On est pas loin si tu ne comprends pas. La deuxieme solution utilise les tableaux.

Dernière modification par sputnick (Le 04/02/2010, à 17:53)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 04/02/2010, à 17:57

Totor

Re : comptage de dossier et calcul de moyenne

sputnick a écrit :

On est pas loin si tu ne comprends pas. La deuxieme solution utilise les tableaux.

moi je crains que ce soit son/sa prof qui ne comprenne pô lol


-- Lucid Lynx --

Hors ligne

#9 Le 04/02/2010, à 17:57

mega-jp

Re : comptage de dossier et calcul de moyenne

pattern not found avec /-m.{5}th

Hors ligne

#10 Le 04/02/2010, à 17:59

Totor

Re : comptage de dossier et calcul de moyenne

mega-jp a écrit :

pattern not found avec /-m.{5}th

tu ne serais pas sur du solaris toi (ou du HP mais je n'y crois pas) ?
c'est quoi comme distrib ?


-- Lucid Lynx --

Hors ligne

#11 Le 04/02/2010, à 18:03

mega-jp

Re : comptage de dossier et calcul de moyenne

mon pc est un hp, ma version de ubuntu c'est le Ubuntu 9.10 - le Koala Karmique

Hors ligne

#12 Le 04/02/2010, à 18:08

mega-jp

Re : comptage de dossier et calcul de moyenne

j'espère répondre à ta question hmm

Hors ligne

#13 Le 04/02/2010, à 18:29

mega-jp

Re : comptage de dossier et calcul de moyenne

sputnick,
ta solution printf '%s\n' */ | wc -l ,marche à la perfection, mais je doit donner le répertoire à "analyser" en paramètre du script.
Pourrait tu également m'expliquer le fonctionnement de cette commande?
Merci de votre aide à tous les deux

Hors ligne

#14 Le 04/02/2010, à 19:30

sputnick

Re : comptage de dossier et calcul de moyenne

mega-jp, peux tu me dire ce que la commande fait en Francais ?

printf '%s\n' "$1"/*/

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#15 Le 04/02/2010, à 20:49

mega-jp

Re : comptage de dossier et calcul de moyenne

sputnick

j'ai tester ton script et en le modifiant comme ceci : printf '%s\n' ~/Bureau/*/ | wc -l
j'ai mis ~/Bureau/ à la place de "$1" pour tester le fonctionnement, et en rajoutant wc -l pour compter, cela marche à 100%, MERCI beaucoup !
Il semblerai que: find ~/Bureau -maxdepth 1 -type d | wc -l 
marche également mais avec des commandes différentes.
Le problème 1 est résolu:D, il me reste à encore fouiner pour les 2 scripts de calcul de moyenne.

Hors ligne

#16 Le 04/02/2010, à 23:12

nesthib

Re : comptage de dossier et calcul de moyenne

question 2 :

function moy {
   sum=0
   for ((i=1 ; i<=$# ; i++ )); do
      sum=$(( $sum + ${!i} ))
   done
   echo "somme : $sum"
   echo -n "moyenne : "
   echo "scale=2 ; $sum / $#" | bc
}

je te propose (comme sputnick) que tu rédiges un post pour expliquer ce que fait le code précédent ligne à ligne.
après à toi de nous donner la réponse pour la question 3 (indices : while et read)

NB. le code précédent est incomplet et nécessite quelques précautions que je te laisse chercher.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#17 Le 05/02/2010, à 10:01

Totor

Re : comptage de dossier et calcul de moyenne

question 2:

#!/bin/bash
[ $# -eq 0 ] && exit 1
sum="($@)/$#"
bc <<< "scale=2;${sum// /+}"

Edit :
@nesthib : plutôt que de boucler sur les indices :

sum=0
for num
do
  ((sum+=num))
done
echo "Somme=${sum}"

Dernière modification par Totor (Le 05/02/2010, à 10:07)


-- Lucid Lynx --

Hors ligne

#18 Le 05/02/2010, à 11:49

nesthib

Re : comptage de dossier et calcul de moyenne

@Totor : j'avais pensé à un truc du genre de ta solution 1 (s/ /+/) mais malgré l'excellente solution ce n'est pas le plus didactique (le prof va tirer la tronche là) tongue
pour la boucle tu as tout à fait raison, c'est plus simple d'utiliser directement les valeurs, j'ai pensé un peu trop vite smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#19 Le 05/02/2010, à 14:07

Totor

Re : comptage de dossier et calcul de moyenne

nesthib a écrit :

@Totor : j'avais pensé à un truc du genre de ta solution 1 (s/ /+/) mais malgré l'excellente solution ce n'est pas le plus didactique (le prof va tirer la tronche là) tongue

pas forcément : tout dépend comment elle est présentée : l'aspect "autonomie / recherche" est un point fort. De plus, il peut la donner comme solution complémentaire suivant ce qu'attend le prof.
du style :

Solution conventionnelle avec le "for"..
En complément, voici une solution plus spécifique au language bash...


-- Lucid Lynx --

Hors ligne

#20 Le 05/02/2010, à 14:34

mohus

Re : comptage de dossier et calcul de moyenne

edit modo : merci de respecter les règles du forum : ne pas polluer le fil de discussion des autres et respecter les catégories du forum. Ouvre ton propre fil dans la catégorie adaptée.
ps. Pose également tes questions de façon plus explicite.

Dernière modification par nesthib (Le 05/02/2010, à 16:41)

Hors ligne

#21 Le 07/02/2010, à 17:17

mega-jp

Re : comptage de dossier et calcul de moyenne

Concernant mon calcul de moyenne j'ai fait ceci :

#!/bin/bash

chiffres=0 					# initialisation des variables
moyenne=0
i=0

 until [ $chiffres -lt 0 ] 			# test de $chiffres < 0
 do
    echo "Entrez un chiffre puis ENTER pour entrer le chiffre suivant (tapez q puis ENTER pour calculer la moyenne) : "
    read chiffres 				# les nombres sont "stocker" dans $chiffres
    if [ $chiffres = "q" ] 			# test de $chiffres pour verifier l'execution du calcul
    then
        chiffres=-1				# si calcul demande, mise a -1 de chiffres

    fi
    
   if [ $chiffres -ge 0 ]			# test de $chiffres >= 0
   then
   let moyenne=$moyenne+$chiffres 		# ajouts des nombres contenu dans $chiffres
   let i=$i+1					# incrementation d'un compteur qui calcul le nombre de chiffres total
   fi
 done

let moyenne=$moyenne/$i				# calcul de la moyenne
echo "La moyenne est de $moyenne"

- Celà fonctionne mais m'oblige à utiliser des nombres entiers...pour y remédier je sais que l'on peut utiliser scale=1 ou bc -l mais je n'arrive pas à placer ces commandes correctement quelqu'un peut m'aider?
- J'ai peut être rendu complexe ma solution, avez vous des améliorations à me proposer?

edit modo : balises code

Dernière modification par nesthib (Le 08/02/2010, à 00:00)

Hors ligne