IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Extraction de ligne d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut Extraction de ligne d'un fichier
    Bonjour.

    Je commence une formation de programmeur, mais le passage sur Unix est assez "flou".

    Pour exemple, je dois faire un script en Bourne Shellqui affiche les ligne 5 à 10 du fichier visé.

    Pour cela, j'ai réussi avec le code suivant :

    #!/bin/sh
    then head -10 $1 | tail -5
    Là ou je pêche, c'est qu'il faut que je teste le fichier visé, pour voir si c'est un fichier ordinaire. Dans le cas contraire, je dois envoyer le message :
    n'est pas un fichier ordinaire, ou n'existe pas

    J'ai donc rédigé cela :

    #!/bin/sh
    if test -f $1
    then head -10 $1 | tail -5
    else echo $1 n\'est pas un fichier ordinaire, ou n\'existe pas
    fi
    Et là, malheureusement, cela m'indique à chaque fois que le fichier n'est pas ordinaire, ou n'existe pas. J'ai beau chercher, je ne vois pas l'erreur que j'ai commise.


    Dans le même ordre d'idée, je dois évaluer deux numérique pour établir une comparaison "est inférieur à".
    #!/bin/sh
    until test [$# -eq 2]
    do
    if test $# -lt 1
    echo Il n\' y a aucun argument, entrez deux arguments
    elif test $# -eq 1
    echo il manque un argument
    elif test $# -gt 2
    echo il y a trop d\'arguments
    fi
    done
    if $1 -lt $2
    then echo $1 est inferieur à $2
    else echo $2 est inferieur à $1
    fi
    j'ai beau chercher, je ne trouve pas l'erreur.

    Merci de vos réponses.


  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    en séparant en fonctions tu t'y retrouvera mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    mesage()
    {
        echo erreur...$1 n'existe pas 
        exit 1
    }
     
    traite()
    {
    file $i | grep ascii > /dev/null
    if [ $? -ne 0 ] ; then
      echo le fichier existe mais n'est pas un fichier ascii
     exit 1
    fi
    #....ce que tu as a faire
    }
     
    [ -f $i ] && ( traite ; exit 0 ) || message
    en clair
    si fichier $1 existe => fonction traite puis exit 0
    sinon fonction message

    la fonction message quitte avec un status 1
    la fonction traite verifie si le fichier est ascii => traite
    sinon emet un message et quitte avec un status 1

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut
    Merci.

    Il y a des trucs que tu as mis que je ne connais pas encore, mais ça me donnera l'occasion de chercher comme :

    > /dev/null

  4. #4
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    1> envoie la sortie standard vers ce qui suit (affichage normal typiquement)
    2> envoie l'erreur standard vers ce qui suit (typiquement l'affichage des messages d'erreur)
    > envoi tout vers .....
    2>&1 envoi tout ce qui est sortie ou erreur standard vers......


    doubler le '>' ajoute sans effacer

    /dev/null comme son nom l'indique est le nean


    commande > /dev/null renvoi l'affichage vers le nean (tu ne le vois donc pas sur l'ecran) mais la commande est pourtant bien executee


    dans le man de bash il y a tous les details mais c'est rebarbatif a lire....

    PS: tu peux aussi pour tes usages personnels creer tes propres descripteurs de niveau 3,4,5,.....

Discussions similaires

  1. Extraction de lignes dans un fichier
    Par fredorly dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 07/07/2014, 14h49
  2. Extraction des lignes d'un fichier txt dans un tableau
    Par med.ben235 dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2014, 17h56
  3. extraction de lignes d'un fichier
    Par manaliac dans le forum Général Python
    Réponses: 2
    Dernier message: 04/04/2012, 20h03
  4. Extraction des lignes d'un fichier sous forme de chaine
    Par rahalfat10 dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2009, 15h40
  5. extraction d'une ligne d'un fichier txt
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 19/01/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo