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

Linux Discussion :

Tester présence variable dans fichier en shell


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut Tester présence variable dans fichier en shell
    Bonjour,

    je doit analyser des fichiers .txt avec un script shell. Si dans le fichier, il y a une variable, ici P330, la suite du script s'exécute, sinon, rien ne se passe.

    Donc j'ai fait le script suivant mais je n'arrive pas à faire fonctionner la fonction if qui teste la présence de cette variable.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #$ nl adress_coordonnee1.awk
    {
    
    for fich in *.txt; do
    
    grep -q "P330" $fich
    if [ "$?" = "0" ]
    then
    
    sed "s/address /'/g" adress2_${fich%.*}.txt > adress1_${fich%.*}.txt
    sed "s/rue/'/g" adress1_${fich%.*}1.txt > adress2_${fich%.*}.txt
    
    #permet de vider la table avant de la remplir
    echo 'echo "truncate table "adresse_'${fich%.*}'" ;" | mysql fournisseur ' > ADRESSE_FINAL_${fich%.*}.sql
    
    
    #affiche "insert into ..." dans un fichier nommé adress_text.csv
    echo 'echo "insert into adresse_'${fich%.*}' (adresse, rue) values '> adress_text.csv
    
    #permet d'inserer les données de adress1_coordonnee1.txt dans adress_text.csv tout en gardant en mémoire les valeurs déja inscrites dans ce fichier.
    cat adress1_${fich%.*}.txt >> adress_text.csv
    
    #permet de supprimer les retours chariots du fichier adress_text.txt puis de tout mettre dans un fichier adress1_text.csv
    tr -d '\r\n' < adress_text.csv > adress1_text.csv
    
    
    sed 's/)(/), (/g' adress1_text.csv > adress2_text.csv
    sed 's/)*$/);" | mysql founisseur/g' adress2_text.csv > adress3_text.csv
    
    
    echo -e '\n' >> adress3_text.csv
    cat adress3_text.csv >> ADRESSE_FINAL_${fich%.*}.sql
    
    
    #permet de supprimer définitivement les fichiers intermédiaires générés après l'éxécution du script sans les mettre dans la poubelle. Il ne restera que ADRESSE_FINAL.sql
    rm adress3_${fich%.*}.txt
    rm adress2_${fich%.*}.txt
    rm adress1_${fich%.*}.txt
    rm adress_text.csv
    rm adress1_text.csv
    rm adress2_text.csv
    rm adress3_text.csv
    
    else
    
    fi
    
    done
    }
    merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 711
    Points : 31 028
    Points
    31 028
    Billets dans le blog
    1
    Par défaut
    $? contient du numérique. On utilise donc l'option "-eq" pour vérifier son égalité avec 0 et non "=".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    grep machin truc
    if [ $? -eq 0 ]
    then
        ...
    fi
    J'ajoute que if étant fait pour tester des status de commandes, et que grep étant elle-même une commande renvoyant un status, rien n'interdit de tester directement le grep
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if grep machin truc
    then
        ...
    fi
    PS: if n'est pas une fonction mais une instruction pour initier une alternative (mais c'est moins grave de parler de "fonction if" que de "boucle if")
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2007, 14h28
  2. [débutant] récupérer variables dans fichier
    Par guigui32 dans le forum Langage
    Réponses: 2
    Dernier message: 30/11/2006, 11h03
  3. test présence key dans fichiers properties
    Par fanchic29 dans le forum Struts 1
    Réponses: 5
    Dernier message: 24/10/2006, 17h15
  4. [9i] Bind variable dans fichier trace
    Par learn dans le forum Oracle
    Réponses: 6
    Dernier message: 27/01/2006, 15h24
  5. Modifier chaîne dans fichier en shell
    Par MiKLnet dans le forum Autres langages
    Réponses: 2
    Dernier message: 11/10/2004, 11h31

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