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

Unix Discussion :

[ksh] Tester l'expansion de fichier


Sujet :

Unix

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut [ksh] Tester l'expansion de fichier
    Bonjour à tous,

    Un petit problème sûrement très simple, mais dont je ne trouve pas la solution. Je voudrais copier des fichiers en utilisant l'expansion, mais si aucun fichier n'est trouvé, mon cp se termine en erreur et comme les traps sont activés...

    Comment puis-je tester que l'expansion va me donner au moins un fichier ?
    J'ai bêtement essayé ça, mais bien sûr ça ne fonctionne pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if [[ -f /root/dir/file*.*pp ]] then
      cp /root/dir/file*.*pp .
    fi
    Quel est la bonne solution ?
    Merci.

    Fred
    Fred

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut la bonne je ne sais pas...
    ... mais une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ `ls /root/dir/file*.*pp |wc -l` -ne 0 ]] then cp /root/dir/file*.*pp ;fi

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ -f /root/dir/file*.*pp ] then
      cp /root/dir/file*.*pp .
    fi
    ɹǝsn *sıɹɐlos*

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ -f /root/dir/file*.*pp ] then
      cp /root/dir/file*.*pp .
    fi
    Tu veux dire que c'est le double crochet qui me met dedans ?

    Edit: visiblement, il n'aime pas quand je met qu'un seul crochet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    syntax error at line 39 : `fi' unexpected
    Fred

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Tu utilises quel shell et sous quel Unix ?
    ɹǝsn *sıɹɐlos*

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Tu utilises quel shell et sous quel Unix ?
    ksh sous HP-UX
    Je pensais que ksh était le même sur tous les unix, ce n'est pas le cas ?
    Fred

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Pas forcément. Les Unix ont en général une version propriétaire de ksh88 et parfois aussi un ksh93 ou dérivé (ex: dtksh).

    Voici ce que j'ai sous Solaris avec ksh88 comme ksh93:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cd /tmp
    $ mkdir a
    $ touch a/1.txt a/2.txt a/3.txt
    $ if [ -f a/*.txt ] ; then echo ok ; else echo ko ; fi
    ok
    $ if [[ -f a/*.txt ]] ; then echo ok ; else echo ko ; fi
    ko
    edit: en me relisant, j'ai trouvé l'erreur. Quand on utilise les crochets simples, il faut mettre un point-virgule avant le then ou le mettre sur la ligne suivante.
    ɹǝsn *sıɹɐlos*

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Voici ce que j'ai sous Solaris avec ksh88 comme ksh93:
    J'ai testé ton code, effectivement ça fonctionne.
    Du coup, j'ai cherché à comprendre la différence avec ce que j'avais fait, c'est le ; qui est obligatoire avec le simple crochet et optionnel avec le double...

    Incorrect : Correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -f a/*.txt ] ; then
    J'avoue que ces syntaxes bizarres me perturbent beaucoup...

    Merci beaucoup, j'aurais jamais trouvé tout seul...

    Fred
    Fred

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    J'avoue que ces syntaxes bizarres me perturbent beaucoup...
    En fait, ce n'est pas très bizarre si on creuse la grammaire du shell.
    Deux commandes shell doivent être séparées par un point-virgule ou un saut de ligne.
    "[" est une commande qui peut aussi s'écrire "test", le "]" est un opérande requis si on a pas utilisé la commande explicite "test" mais n'est pas un séparateur de commande. Il faut donc séparer le bloc¨"[ xxx ]" de la commande suivante par un ";" ou par un saut de ligne.
    Par contre, "[[" n'est pas une commande mais l'ouverture d'une expression à évaluer qui est terminée par "]]". Un séparateur n'est donc pas ici nécessaire.
    ɹǝsn *sıɹɐlos*

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    En fait, ce n'est pas très bizarre si on creuse la grammaire du shell.
    Je me doutais bien qu'il y avais une "logique" derrière, mais de prime abord ça parait quand même bizarre
    En tout cas, merci pour l'explication, ça va peut-être me permettre de ne plus faire l'erreur...

    PS: Quelque chose me dis que tu dois être content ce soir...

    Fred.
    Fred

  11. #11
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    PS: Quelque chose me dis que tu dois être content ce soir... Fred.
    ɹǝsn *sıɹɐlos*

  12. #12
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    J'ai testé ton code, effectivement ça fonctionne. ...
    J'avoue que ces syntaxes bizarres me perturbent beaucoup...

    Merci beaucoup, j'aurais jamais trouvé tout seul...

    Fred
    dans then est le 2eme argument de if et pas la suite de la structure de commande

    j'écris toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [ -f a/*.txt ]
    then
       ...
    else
       ...
    fi
    ainsi pas d'erreur sur les ;
    et ça garde le code clair


    de plus [ -f a/*.txt ] est l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if test -f a/*.txt
    then
       ...
    else
       ...
    fi
    A+JYT

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

Discussions similaires

  1. [ksh]tester existence fichier
    Par pop_up dans le forum Linux
    Réponses: 4
    Dernier message: 03/08/2007, 16h07
  2. Tester la taille de fichier avant upload
    Par RobinNono dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/06/2006, 17h38
  3. Ksh - tester si un fichier est vide ou pas?
    Par mzt.insat dans le forum Linux
    Réponses: 1
    Dernier message: 25/04/2006, 14h22
  4. Réponses: 4
    Dernier message: 08/09/2005, 22h24
  5. Réponses: 10
    Dernier message: 18/11/2003, 18h01

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