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 POSIX Discussion :

Mémoriser le nombre de fichiers : question sur LET (sun OS)


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut Mémoriser le nombre de fichiers : question sur LET (sun OS)
    Bonjour.

    En voulant faire un script où j'avais besoin de mémoriser le nombre de fichiers contenu dans un dossier, je suis arrivé à une "bizarrerie" : LET n'accepte pas les substitutions de commandes avec $(...)

    Le code exemple :

    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
     
    echo 'Sur la variable UNE : avec let et $(...)'
    typeset -i UNE=0
    let UNE=$(ls | wc -l)
    echo "Elle vaut : ${UNE}"
     
    echo 'Sur la variable DEUX : avec ((...))'
    typeset -i DEUX=0
    ((DEUX=$(ls | wc -l)))
    echo "Elle vaut : ${DEUX}"
     
    echo 'Sur la variable TROIS :  a linitialisation'
    typeset -i TROIS=$(ls | wc -l)
    echo "Elle vaut : ${TROIS}"
     
    echo 'Sur la variable QUATRE : `...` '
    typeset -i QUATRE=0
    QUATRE=`ls | wc -l`
    echo "Elle vaut : ${QUATRE}"
    J'exécute mon shell (dans un dossier où il y a deux fichiers) et j'ai le résultat suivant :
    Sur la variable UNE : avec let et $(...)
    Elle vaut : 0
    Sur la variable DEUX : avec ((...))
    Elle vaut : 2
    Sur la variable TROIS : a linitialisation
    Elle vaut : 2
    Sur la variable QUATRE : `...`
    Elle vaut : 2
    Je n'arrive pas à expliquer pourquoi la variable UNE ne vaut pas 2 en sortie... Seule explication : let n'accepte pas les substitutions avec $(commande). Mais pourquoi ?

    En tapant man let, je n'ai rien eu des très concret :
    NAME
    let - shell built-in function to evaluate one or more arith-
    metic expressions

    SYNOPSIS
    ksh
    let arg...

    DESCRIPTION
    ksh
    Each arg is a separate "arithmetic expression" to be
    evaluated.

    EXIT STATUS
    The following exit values are returned:

    0 The value of the last expression is non-zero.
    1 The value of the last expression is zero.

    ATTRIBUTES
    See attributes(5) for descriptions of the following attri-
    butes:

    ____________________________________________________________
    | ATTRIBUTE TYPE | ATTRIBUTE VALUE |
    |_____________________________|_____________________________|
    | Availability | SUNWcsu |
    |_____________________________|_____________________________|


    SEE ALSO
    ksh(1), set(1), typeset(1), attributes(5)

    SunOS 5.10 Last change: 15 Apr 1994
    Ce que j'ai mis en gras dans le man sous-entend-il qu'on ne peut avoir des "vraies" variables et des nombres en dur dans une expression avec let ?



    Merci d'avance de vos réponses




    PS : j'ai testé sous SUN8, même résultat.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    je ne crois pas que cela vienne de let :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ksh --version
      version         sh (AT&T Research) 93s+ 2008-01-31
    $ ksh
    ksh_93s+ $ typeset -i une=0          
    ksh_93s+ $ let une=$(ls -1 ~ | wc -l)                                      
    ksh_93s+ $ echo $une                 
    90
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut Euh.....
    J'essaye d'exécuter ton code et j'obtiens ça :


    [16:07:13]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
    >typeset -i une=0

    [16:07:15]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
    >let une=$(ls -1 ~ | wc -l)
    ksh: une=: more tokens expected

    [16:07:21]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
    >echo $une
    0

    [16:07:27]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
    >ksh --version
    [${_x[(_m=_mm)==(_h=_hh)==(_s=_ss)]}$_h:$_m:$_s]tdudev02@bt1sssav:${PWD}
    Une implémentation de ksh qui ne va pas ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    mais... tu es sur GNU/linux ? lequel ? sinon tu trouveras plus d'aide sur le forum UNIX.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Je suis sous SunOS 5.10.

    Je pensais que c'était une question générale de Shell, pas forcément lié à l'OS.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    dans mon esprit, sur Linux, on utilise davantage bash, et sur Unix, plus ksh...
    ce n'est sans doute qu'une impression

    de plus, bien souvent, la version de ksh utilisée sur Unix est la 89...
    et les outils ne sont pas GNU (les options de ls, par exemple, ne sont pas toujours les mêmes : --color vs. -G, etc).

    mais vu que je n'utilise pas d'Unix, je ne dis peut-être que des bêtises

    il vaut donc mieux t'adresser à des personnes qui ont plus de chances d'utiliser la même version de shell et les mêmes outils
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Nombre de connections simultanées sur un fichier ?
    Par smarties dans le forum Statistiques
    Réponses: 7
    Dernier message: 12/11/2006, 01h35
  2. Réponses: 3
    Dernier message: 09/09/2006, 23h03
  3. 3 questions sur l’importation de fichier Excel
    Par helenafr dans le forum Access
    Réponses: 5
    Dernier message: 05/04/2006, 07h38
  4. [Conception] Question sur un code permettant de connaître le nombre de connectés
    Par inferno66667 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/12/2005, 19h49
  5. Questions sur les fichiers Ressource .RC .RES
    Par dexterz dans le forum Langage
    Réponses: 10
    Dernier message: 01/08/2005, 10h15

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