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

  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 721
    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 721
    Points : 31 044
    Points
    31 044
    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")

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