Forum Linux.débutant Debutant demande aide

Posté par  . Licence CC By‑SA.
Étiquettes :
-2
30
sept.
2014

Bonjour

Je suis etudiant a epitech, actuellement en piscine C.

Pour l'instant on apprend a se servir de linux, et les ennoncés sont pour moi un peu corsé.

Ecrire un script nommé “how_many_are_we.sh” qui affiche le nombre d’étudiants de la ville passée en paramètre. Sans paramètre, le script affiche le nombre totald’étudiants.
* Utilisez le fichier “students.csv” pour récupérer les données nécessaires
* Nous utiliserons notre propre fichier, merci de ne pas le commit dans votre dépôt (dans le cas contraire, vous serez sanctionné).
* Le paramètre passé au script sera toujours valide.
?> cat ~/moulinette/students.csv | ./how_many_are_we.sh bdx"

Pouvez vous me dire ou chercher, ou un debut de piste? Sachant que je suis completement debutant.

Je vous remercie du temps que vous m'accordez

  • # quelques pistes...

    Posté par  . Évalué à 3. Dernière modification le 30 septembre 2014 à 10:28.

    man wc
    man grep
    man expr
    man read (mais regarde plutôt des exemples sur le net, la page de man va pas t'aider beaucoup, imbitable)

    ajout :
    man cut

    Please do not feed the trolls

  • # Comprend rien x)

    Posté par  . Évalué à -1.

    Euuuh, merci pour les pistes, mais le man est pour moi incomprehensible.

    En fait si j'ai bien compris, je doit creer une ligne qui "filtrera" les infos recherchées dans le dossier students.csv vers how_any_are_we.sh

    Or, je ne vois pas dutout dutout comment structurer ma ligne, et ou trouver les infos de ma ligne.
    Mon "prof" (un eleve de 3em année) me dit de lire sur une entrée standard.

    Wtf? :(

    • [^] # Re: Comprend rien x)

      Posté par  . Évalué à 3.

      Donc, dans ton students.csv, tu dois avoir sur chaque lignes des données de la forme :
      champ1,champ2,champ3,champ4...

      l'idée c'est d'écrire un programme qui va lire l'entrée standard, et traiter chacune de ses lignes.

      cat fichier | programme ça va "injecter" le contenu du fichier dans le programme l'écriture programme < fichier est plus visuelle, le cat fichier | ici ne sert à rien.

      ce programme, il faut qu'il lise le fichier, ligne par ligne, je ne sais pas comment est formaté le fichier csv. Mais je vais prendre un tout autre exemple :

      Pour écrire un programme qui lit chaque ligne de son entrée standard et qui ajoute "tavu!?" après, on peut faire comme ça :

      #!/bin/sh 
      while read ligne
      do
          echo $ligne tavu !?
      done

      Please do not feed the trolls

    • [^] # Re: Comprend rien x)

      Posté par  . Évalué à 4.

      Pourtant la première ligne de la doc de 'read' contient une grande partie de la solution:
      Lit une ligne depuis l'entrée standard et la découper en morceaux.

      RTFM ?

    • [^] # Re: Comprend rien x)

      Posté par  (site web personnel) . Évalué à 2.

      man man
      

      La commande si dessus peux paraître humoristique, mais je suis passé par epitech moi aussi, et si tu compte aller au bout il est vital de savoir lire une page de man sinon tu seras condamner à être le boulet des groupes plus fort que toi (et ils ne t'expliquerons rien parce que ça les mettrai en retard pour terminer des projets à deadline hypertendu).

      bonne chance en tout cas.

  • # Simple curiosité

    Posté par  . Évalué à 6. Dernière modification le 30 septembre 2014 à 11:29.

    N'y vois aucune intention négative, ceci est une vraie question: comment se retrouve-t-on dans une école comme epitech quand on a aucune notion de base relative aux environnements UNIX et qu'on ne sait apparemment pas utiliser un moteur de recherche ?
    Et pour être tout de même utile, bonne lecture: Flux standard

    • [^] # Re: Simple curiosité

      Posté par  . Évalué à 2.

      Et aucune notion de programmation aussi

    • [^] # Re: Simple curiosité

      Posté par  . Évalué à 7.

      Le principe d'une école c'est pas d'apprendre par hasard ? Parce que si on connaît déjà tout sur Unix, on a peut-être pas besoin d'y aller.

      Et non, ne pas connaître Bash et C, ça ne veut pas dire qu'on y connaît rien de rien en informatique. On peut avoir fait un peu de Python sous Windows (grand dieux !) et s'y connaître en réseau. Et pour arriver sur Linuxfr et poser une question, faut sûrement avoir utilisé un moteur de recherche.

      • [^] # Re: Simple curiosité

        Posté par  . Évalué à 2. Dernière modification le 30 septembre 2014 à 13:47.

        je peux me tromper, mais pour moi epitech rime avec autodidacte passionné (ou croyant l'être) qui veut valider et approfondir ses connaissances sans passer par les contraintes d'une école d'ingénieur.

    • [^] # Re: Simple curiosité

      Posté par  . Évalué à 2.

      Tu n'as pas plus besoin de savoir programmer pour entrer dans une école d'informatique que de savoir poser une sonde urinaire lorsque tu entres dans une école d'infirmière.

      • [^] # Re: Simple curiosité

        Posté par  . Évalué à 5.

        Les infirmières apprennent comment est foutu le système urinaire avant d'apprendre à placer une sonde.
        Les mécaniciens apprennent le principe de fonctionnement d'un moteur 4 temps avant de caler des soupapes.
        Les informaticiens apprennent les entrées sorties et les processus avant de faire du shell…

        Please do not feed the trolls

  • # Salut

    Posté par  . Évalué à 5.

    Tu m'as l'air complètement largué. Je pense qu'il va falloir que tu passes du temps à lire les pages de manuel. Même si possible que tu te procures un livre sur le shell Unix et que tu le potasses sérieusement. Je vais quand même t'aider un peu.

    Mettons que j'ai le fichier CSV suivant (gens.csv):

    Prénom;Nom;Ville;Âge
    Alain;Robert;Paris;33
    Eva;Martin;Toulouse;45
    Bob;Latour;Paris;18
    Henry;Biloute;Castres;66
    

    le script ci-dessous est un début (combien.sh) :

    #!/bin/sh
    
    
    if [ ! -z $1 ]; then
    
    n=$(cut -d ';' -f3 - |grep -c $1 );
    echo "Il y a $n gens sur ${1}.";
    
    else
    
    n=$(wc -l)
    echo "Il y a $((n - 1)) gens au total.";
    
    fi;

    que je peux utiliser ainsi :

    moi@PC055238 ~
    $ cat gens.csv |./combien.sh Paris
    Il y a 2 gens sur Paris.
    
    moi@PC055238 ~
    $ cat gens.csv |./combien.sh
    Il y a 4 gens au total.
    
    moi@PC055238 ~
    $ cat gens.csv |./combien.sh Bordeaux
    Il y a 0 gens sur Bordeaux.
    

    Attention, ce script devrait être loin de te rapporter une bonne note ;) Par exemple si des lignes vides étaient présentes dans le fichier CSV elles seraient comptées dans le total des gens…

    Tu peux donc potasser le manuel de ton shell (sh, bash, dash, ksh, etc), il est gros, tu vas y passer du temps sur celui là, pour comprendre ce que le script fait. Ainsi que les manuels de cut, grep, wc, et bien d'autres encore.

    J'espère que bien que débutant sous Linux tu as quand même des notions d'algorithmie, que tu as par exemple déjà fait des scripts sous Windows, parce que sinon ça va être dur (mais tu peux y arriver en travaillant)

    • [^] # Re: Salut

      Posté par  . Évalué à 1.

      un autre conseil : installer linux sur ton pc à la maison.

    • [^] # Re: Salut

      Posté par  . Évalué à 3.

      UUOC !

      • [^] # Re: Salut

        Posté par  . Évalué à 2.

        Je sais bien. J'ai repris le texte de son exercice :

        ?> cat ~/moulinette/students.csv | ./how_many_are_we.sh bdx

        On voit bien que c'est volontairement écrit dans un but didactique pour introduire le pipe et les arguments en faisant d'une pierre deux coups :)

        D'ailleurs dans la vraie vie il faudrait sûrement mieux écrire un script qui prend deux arguments ./combien.sh [fichier|-] <ville>

        Avec la possibilité d'indiquer - comme fichier si on veut vraiment lire la sortie standard d'un autre programme.

        Je pense que si on maîtrise l'un des shells UNIX/Linux classiques et l'ensemble des coreutils (ou leurs équivalents sous UNIX), on a déjà un bon bagage (certains diront le minimum) pour travailler dans l'informatique sous GNU/Linux ou autre UNIX-like.

  • # Lire le cours

    Posté par  . Évalué à 6.

    ca parait idiot, mais si on te donne un devoir, c'est probablement qu'il y a eu un cours, avec des exemples,

    et n'y voit aucune offense, mais il te faut alors lire, ET comprendre le cours,
    pour restituer ces connaissances pour resoudre l'exercice.

    • [^] # Re: Lire le cours

      Posté par  . Évalué à 2.

      C'est là où ils sont forts chez Epitech : y a pas (vraiment) de cours !
      En fait tu paies très cher pour t'auto-former. Tu me diras que ça fait cher
      la connexion internet ( +- 8000/an de mémoire ) mais bon tu
      trouves du boulot direct à la NASA en sortant.

      • [^] # Re: Lire le cours

        Posté par  . Évalué à 6.

        Il faut reconnaitre que si tu arrives en 3 ans de passer du stade "euh, j'ai ouvert un terminal et c'est tout noir" à "bosser à la NASA", tu n'es pas la moitié d'un con. Mais vu que d'après mon expérience la distribution des capacités cognitives dans les écoles d'ingé est à peu près identique à celle de la population générale (sans considérer les effets délétères de l'alcool), ce genre de formation doit s'accompagner d'un taux d'échec avoisinant les 98%. Parmi les hypothèses alternatives : (a) l'OP n'est pas représentatif de la population d'étudiants de l'école, (b) ils enterrent des gens sous le parking et ils les remplacent par des clones androïdes, (c) ils embauchent n'importe qui à la NASA.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.