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 :

Création de fichier si non présent


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 102
    Par défaut Création de fichier si non présent
    Bonjour à tous,

    je dois réaliser un script en .ksh qui test la présence d'un fichier lock
    Si présent le script s'arrête
    Sinon il créer le fichier .lock

    Lorsque le fichier .lock est positionné le script sort OK
    Lorsque le fichier .lock n'est pas positionné, je n'arrive pas à le créer ???



    je débute et je bute

    Merci à tous pour votre aide


    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #!/bin/ksh
    #---------------------------------------------------------------------#
    #@(#) SCRIPT : Pose de fichier lock
    #---------------------------------------------------------------------#
    #@(#) Fonction             : Pose de fichier lock si n'existe pas si existe sortie
    #@(#) Auteur               : xxx
    #@(#) Parametres d'entree  :
    #@(#) Parametres de sortie :
    #@(#) Retour               : 0=Ok, sinon
    #@(#) Scripts appeles      :
    #@(#) Commentaires         :
    #@(#)
    #---------------------------------------------------------------------#
    # Historique:
    #       <version> <auteur> <date> <description>
    # 1.0 xxx 16/03/2015  Creation
    #---------------------------------------------------------------------#
     
    # decommenter pour "debug"
    # set -x
     
    #---------------------------------------------------------------------#
    # Initialisation environnement
    #---------------------------------------------------------------------#
    VERSION="1.00"
    dir_fic_boubl=/tmp/projets
    dir_lock=${dir_fic_boubl}/Lock
    fic_lock=${dir_lock}/fic_xml.lock
    LOG=/tmp/xml.log
    #---------------------------------------------------------------------#
    #Corps du script
    #---------------------------------------------------------------------#
     
    Debut
     
    msglog $LOG 0 0 "--Debut: Verification du fichier $fic_lock"
     
    if [[ -f $fic_lock ]]
    then
     
            msglog $LOG 0 0 "INFO: Fichier $fic_lock present "
            $fic_lock /$dir_lock
            if [[ $? -eq 0 ]]
               then
                  msglog $LOG 3 4 "ERREUR: $fic_lock present traitement annule"
                  exit 4
            fi
     
     
                  msglog $LOG 0 0 "INFO:Depose du fichier $fic_lock"
    else
     
            msglog $LOG 3 ${LINENO} "ERREUR: $fic_lock inexistant"
     
                  exit ${LINENO}
     
    fi
    msglog $LOG 0 0 "--Fin: Verification nu fichier $fic_lock present"
     
    Fin

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 079
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 079
    Par défaut
    Citation Envoyé par PAB/31/SAB Voir le message
    Lorsque le fichier .lock n'est pas positionné, je n'arrive pas à le créer ???



    je débute et je bute
    As-tu relu ton code ? Elle est où l'action de créer le fichier ?

    On se demande, des fois...

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 102
    Par défaut
    Merci Jpété
    Oups j'avais oublier la commande touch
    Mais cela ne change rien ???

    Désolé

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #!/bin/ksh
    #---------------------------------------------------------------------#
    #@(#) SCRIPT : Pose de fichier lock
    #---------------------------------------------------------------------#
    #@(#) Fonction             : Pose de fichier lock si n'existe pas si existe sortie
    #@(#) Auteur               : xxx
    #@(#) Parametres d'entree  :
    #@(#) Parametres de sortie :
    #@(#) Retour               : 0=Ok, sinon
    #@(#) Scripts appeles      :
    #@(#) Commentaires         :
    #@(#)
    #---------------------------------------------------------------------#
    # Historique:
    #       <version> <auteur> <date> <description>
    # 1.0 xxx 16/03/2015  Creation
    #---------------------------------------------------------------------#
     
    # decommenter pour "debug"
    # set -x
     
    #---------------------------------------------------------------------#
    # Initialisation environnement
    #---------------------------------------------------------------------#
    VERSION="1.00"
    dir_fic_boubl=/tmp/projets
    dir_lock=${dir_fic_boubl}/Lock
    fic_lock=${dir_lock}/fic_xml.lock
    LOG=/tmp/xml.log
    #---------------------------------------------------------------------#
    #Corps du script
    #---------------------------------------------------------------------#
     
    Debut
     
    msglog $LOG 0 0 "--Debut: Verification du fichier $fic_lock"
     
    if [[ -f $fic_lock ]]
    then
     
            msglog $LOG 0 0 "INFO: Fichier $fic_lock present "
     
             touch $fic_lock /$dir_lock
     
             if [[ $? -eq 0 ]]
               then
                  msglog $LOG 3 4 "ERREUR: $fic_lock present traitement annule"
                  exit 4
            fi
                  msglog $LOG 0 0 "INFO:Depose du fichier $fic_lock"
    else
     
                  msglog $LOG 3 ${LINENO} "ERREUR: $fic_lock inexistant"
     
                  exit ${LINENO}
     
    fi
    msglog $LOG 0 0 "--Fin: Verification du fichier $fic_lock present"
     
    Fin

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour,

    touch $fic_lock /$dir_lock
    Non seulement cela n'a pas de sens mais c'est ce qu'on appelle "mettre la charrue avant les boeufs".

    De plus, vue la définition de $fic_lock, la précision de son répertoire par $dir_lock est inutile. Donc même dans l'autre sens, ça ne fonctionne pas.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Bonjour,

    test[er] la présence d'un fichier [...]
    => help test,
    sinon man ksh /Conditional Expressions.
    ça m'apprendra peut-être à lire les messages d'un sujet en entier

    touch est une commande externe inutile : une simple redirection crée un fichier (>fichier).
    touch modifie les dates d'un fichier, et, s'il n'existe pas, alors le crée (mais ce n'est pas son but initial).

    pourquoi ksh ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut
    Bonjour,

    teste si $fic_lock est un fichier, un
    me parait plus judicieux, non ?

  7. #7
    Membre Expert
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 555
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 555
    Par défaut
    Bonjour,

    Et que renvoie ton script avec l'option prévue à cet effet set -x, decommenter pour "debug" ?
    Citation Envoyé par PAB/31/SAB Voir le message
    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
    #!/bin/ksh
    #---------------------------------------------------------------------#
    #@(#) SCRIPT : Pose de fichier lock
    #---------------------------------------------------------------------#
    #@(#) Fonction             : Pose de fichier lock si n'existe pas si existe sortie
    #@(#) Auteur               : xxx
    #@(#) Parametres d'entree  :
    #@(#) Parametres de sortie :
    #@(#) Retour               : 0=Ok, sinon
    #@(#) Scripts appeles      :
    #@(#) Commentaires         :
    #@(#)
    #---------------------------------------------------------------------#
    # Historique:
    #       <version> <auteur> <date> <description>
    # 1.0 xxx 16/03/2015  Creation
    #---------------------------------------------------------------------#
     
    # decommenter pour "debug"
    set -x
    [...]
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

    Liste des balises BB

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    @barbican82: aucune de tes deux commandes n'ont l'instruction nécessaire après un if.

    Pour ne pas jouer au chat et la souris, je précise tout de suite que [ ] est un raccourci pour la commande test. Les -f et -e sont les options de la commande test. Pour plus d'info:
    On pourrait imaginer les commandes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ if grep 'motif' fichier.txt;then echo OK;fi
    OK
    $ if ./mon_appli_de_la_mort.bash -q cible;then echo OK;fi
    OK
    $ if :;then echo OK;fi
    OK

  9. #9
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut
    @barbican82: aucune de tes deux commandes n'ont l'instruction nécessaire après un if.
    Bonjour,

    en effet, mes commandes sont incomplètes, ce n'était qu'un exemple.

    Dans la question d'origine
    je dois réaliser un script en .ksh qui test la présence d'un fichier lock
    Si présent le script s'arrête
    Sinon il créer le fichier .lock
    PAB/31/SAB utilise:
    or, sauf si je me trompe, ce code teste si le fichier est bien un fichier.

    par contre, toujours sauf si je me trompe
    teste si le fichier existe.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    -e teste si le fichier existe. Mais un répertoire est aussi un fichier («tout est fichier»), donc il peut y avoir une ambiguïté.
    -f teste si le fichier est un fichier normal, et donc si le fichier n'est pas un fichier normal, ou si le fichier n'existe pas, le code de retour sera supérieur à 0 (zéro).

    j'ajoute que des tests simples ne requièrent qu'un simple test, ou [; je réserve [[ pour les tests étendus.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Citation Envoyé par barbican82 Voir le message
    or, sauf si je me trompe, ce code teste si le fichier est bien un fichier.

    par contre, toujours sauf si je me trompe
    teste si le fichier existe.
    Boulet. Si tu avais pris le temps de travailler en lisant "help test" comme je te l'ai dit, tu aurais lu la réponse directement:
    Citation Envoyé par help test
    -e FILE True if file exists.
    -f FILE True if file exists and is a regular file.

  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Boulet. Si tu avais pris le temps de travailler en lisant "help test" comme je te l'ai dit, tu aurais lu la réponse directement:
    Bonjour,

    je vois que le fait d'être un "expert confirmé" peut parfois monter à la tête et permettre à certaines personnes d'afficher une suffisance et une arrogance impressionnante.

    Bien que récemment arrivé sur ce forum, j'ai passé des années sur d'autres sites d'échanges d'informations et jamais je n'ai vu quelqu'un se permettre une telle réaction.

    Par définition, un forum est un espace ou chacun peut poser ses questions et apporter sa pierre à l'édifice selon le principe qui dit que "si tu sais, partage, si tu ne sais pas, demande". Chacun a également le droit de se tromper, des discussions ou des débats peuvent s'engager, ce n'est pas un endroit ou des réactions agressives ou imbéciles doivent se trouver.
    Comme je le disais dans un de mes posts précédents, je me trompe peut-être.

    je ne reprendrai pas le mot que tu as employé pour ne pas descendre à ton niveau mais d'autres plus forts me viennent à l'esprit.

    Bonne journée.

  13. #13
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Citation Envoyé par barbican82 Voir le message
    (...) Chacun a également le droit de se tromper, (...) je me trompe peut-être.(...)
    Les gens qui se trompent sont les bienvenus et ce n'est jamais cela qui a été mis en cause. C'est ceux qui ne font rien et qui comptent sur les autres pour faire leur travail qui gonflent ceux qui répondent sur les forums.
    On poste des réponses, vous les survolez vaguement, en mode "je sais déjà tout ce que tu dis", et vous repostez la même question.

    Alors ne viens pas donner des leçons de respect, tu n'en a aucun.

    PS: pas de pot, c'est tomber sur toi

  14. #14
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut
    Bonjour,


    est-ce que ceci ne pourrais pas être résolu par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ -e $fic_lock && ( !-d $fic_lock ) ]] then .....

  15. #15
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Non, car il y a 2 crochets ouvrants et 4 crochets fermants.

    De plus, si le sous-entendu est qu'un fichier régulier est tout fichier qui n'est pas un répertoire, c'est faux également. Les pipes nommés ne sont pas des fichiers réguliers, par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ mkfifo /tmp/prout
    $ if test -e /tmp/prout;then echo OK;fi
    OK
    $ if test -f /tmp/prout;then echo OK;fi
    $ if test -d /tmp/prout;then echo OK;fi
    $

  16. #16
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 102
    Par défaut Merci à tous pour les réponses
    J'ai trouvé en utilisant juste le temps de me poser.
    Merci pour toutes les infos qui me serviront a progresser.

    Le résultat:


    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #Script qui verifie la presence d'un fichier .lock 
    #Si ce dernier est présent le traitement est annulé et le script sort en erreur
    #Si le fichier.lock n'est pas présent il créer un fichier (touch $FIC_LOCK)
     
     
    #!/bin/ksh
    #--------------------------------------------------------------------------------
    # @(#)SCRIPT                    : Traitement des fichiers.xml
    #--------------------------------------------------------------------------------
    # @(#)Application               : 
    # @(#)Fonction                  : Script modele
    # @(#)Auteur                     : 
    # @(#)Version                    : 1.00
    # @(#)Date de creation          : 
    # @(#)Date de modification      :
    # @(#)Auteur de modification    :
    # @(#)Parametres d'entree       :
    # @(#)Codes retour              : 0=Ok, sinon
    # @(#)
    # @(#)Commentaires              :
    # @(#)
    # @(#)Etapes du script          :
    #--------------------------------------------------------------------------------
    # @(#)Modifications             :
    # @(#)date              auteur          version     : libelle
    # @(#)
    #-------------------------------------------------------------------------------
     
    #set -x
     
    ############# Variales #################
     
    VERSION=1.00
    DIR_FIC_DOUBL=/tmp/projets
    DIR_LOCK=${DIR_FIC_DOUBL}/Lock
    FIC_LOCK=${DIR_LOCK}/fic_xml.lock
    DIR_LOG=${DIR_FIC_DOUBL}/Log
    LOG=${DIR_LOG}/xml.log
     
    #----------------------------------------------------------------------#
     
    #Corps du script
    #----------------------------------------------------------------------#
     
    Debut
     
    #----------------------------------------------------------------------#
    # Verification de la non presence du fichier .lock
    # Si presence traitement annule
    #----------------------------------------------------------------------#
     
    msglog $LOG 0 0 "--Debut: Verification du fichier $FIC_LOCK"
     
    if [[ ! -f $FIC_LOCK ]]
    then
     
            msglog $LOG 0 0 "INFO: Fichier $FIC_LOCK non present "
            touch $FIC_LOCK
     
            if [[ $? -ne 0 ]]
            then
     
                    msglog $LOG 3 4 "ERREUR: Fichier $FIC_LOC deja present"
                    exit 4
            fi
            msglog $LOG 0 0 "INFO: Depose du fichier $FIC_LOCK"
     
    else
            msglog $LOG 3 ${LINENO} "ERREUR: Fichier $FIC_LOCK deja present traitement annule"
     
            exit ${LINENO}
     
    fi
    msglog $LOG 0 0 "--Fin: Verification du fichier $FIC_LOCK"
     
    Fin

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Citation Envoyé par barbican82
    est-ce que ceci ne pourrais pas être résolu par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ -e $fic_lock && ( !-d $fic_lock ) ]] then .....
    tu ne tiens pas compte de nos remarques.
    Citation Envoyé par NBaH
    des tests simples ne requièrent qu'un simple test, ou [
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test -e $fic -a ! -d $fic; then : ... fi

    mais pourquoi introduire des complications dans le code ?
    le script de PAB/31/SAB a créé (ou pas) un fichier normal, il n'y a pas lieu de tester autre chose que l'existence d'un fichier normal !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/01/2014, 09h58
  2. Réponses: 11
    Dernier message: 21/02/2012, 08h40
  3. Réponses: 1
    Dernier message: 30/05/2011, 00h40
  4. Recherche d'un formulaire et création s'il est non présent
    Par Glherbier dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/08/2008, 19h20
  5. [Plug-in] menu création script JavaCC non présent
    Par visiwi dans le forum Eclipse
    Réponses: 1
    Dernier message: 08/08/2008, 17h46

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