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 :

Tester si un array est renseigné


Sujet :

Shell et commandes POSIX

  1. #1
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut Tester si un array est renseigné
    Bonjour,

    savez vous comment on peut tester si un array est rensigner ?
    Mon but est de capturer sur la sortie standard les entrée de l'utilisateur dans un array. Puis de boucler les différents choix et faire une série de commandes.

    Mai j'arrive pas à trouver de moyen de tester si mon array est vide parce que l'utilisateur n'a rien renseigné et dans ce cas, sortir du script ou le relancer.

    Merci pour votre aide.

    Le début de mon script est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    echo "selectionnez le cube :"
    read RESP
    set -A cube $RESP
     
    #Si cube est vide alors sortie (et relance du script ?) sinon...
    for i in ${cube[@]}
    do 
      #Positionnement dans le dossier où le fichiers doivent être déposés par le STFP et à partir duquel le .ksh doit être exéxuté
      cd /home/ess_tms/temp/JTMS$i
     etc....
    done
    Merci pour vos lumières

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Bonjour,
    Le nombre d'élément d'un tableau:
    ou

  3. #3
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    arf...la honte
    j'avais essayé
    sans le
    #
    et forcément ca marchait pô...

    Bon je suis prête à me choper la honte une 2eme fois.

    Voici ce que je fais
    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
     
    echo "Selection le cube :"
    read RESP
     
    set -A cube $RESP
     
    est_vide=${#cube[*]}
    if est_vide != 0 then  
      for i in ${cube[@]}
      do 
        #Positionnement dans le dossier où le fichiers doivent être déposés par le STFP et à partir duquel le .ksh doit être exéxuté
        cd /home/ess_tms/temp/JTMS$i
        touch creation_ok.txt
      done
    else echo "vide"
    fi
    Et j'ai un retour erreur en ligne 15 qui me dit
    ./test4.ksh[26]: syntax error at line 15 : `else' unexpected
    Comprends pas.... La structure c'est bien IF THEN ELSE/ELIF FI

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Il faut une fin de commande avant then soit un point-virgule, soit un saut de ligne.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Moi, perso, je pense plus pour l'oubli du mot test sur la ligne du if...

  6. #6
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    faut une fin de commande avant then soit un point-virgule, soit un saut de ligne
    Oui c'etait une première erreur, tu as raison un ";" sio le "then" est sur la même ligne apparemment

    Par contre pour le "test" je crois ce n'est réservé que pour les fichiers, non ? Or moi je suis dans un tableau....

    Mais je progresse, finalement voici ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    nb_saisie=${#cube[*]}
    if [[ -n "$nb_saisie" ]]
    then
        for i in ${cube[@]}
          do 
          #Positionnement dans le dossier où le fichiers doivent être déposés par le STFP et à partir duquel le .ksh doit être exéxuté
          cd /home/ess_tms/temp/JTMS$i
          touch creation_ok.txt
        done
    else
    echo "vide"
    fi
    Ca fonctionne dans le sens où si il est renseigné, le fichier est créé et on sort sans erreur. Si il est vide, il ne créé pas de fichier, il sort sans erreur mais le echo "vide" ne s'affiche pas...

    Une idée ?

    Merci en tout cas à vous tous pour votre aide

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Moi, perso, je pense plus pour l'oubli du mot test sur la ligne du if...
    Il y a ça aussi (c)

  8. #8
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Il y a ça aussi (c)
    ???
    Comprends pas.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Citation Envoyé par mederik Voir le message
    Il y a ça aussi (c)
    ???
    Comprends pas.
    Référence (ratée) à une histoire de pomme.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Alors pour un test numérique:
    ou
    sans entourer les variables par des guillemets.

  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 842
    Points
    7 842
    Par défaut
    Bien que ce soit une extension répandue et supportée par ksh, bash et autres, le shell POSIX ne connait pas les tableaux en dehors de la liste d'arguments passés en paramètre. C'est donc ce qu'il faut utiliser en priorité pour un script strictement portable.

    Voici une solution POSIX et simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    printf "Selectionner le cube : "
    read RESP
     
    if [ -n "$RESP" ]; then
      for i in $RESP ; do
        cd /home/ess_tms/temp/JTMS$i
        touch creation_ok.txt
      done
    else
      echo "vide"
    fi

  12. #12
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Désolé d'insister et de passer pour un lourd mais ça en ligne 4 ca fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    est_vide=${#cube[*]}
    #si rien n'est renseigné par l'utilisateur  
    if [$est_vide == 0]; then
      echo "vide"
    else
      for i in ${cube[@]}; do
        #Positionnement dans le dossier où le fichiers doivent être déposés par le STFP et à partir duquel le .ksh doit être exéxuté
        cd /home/ess_tms/temp/JTMS$i
        touch creation_ok.txt
      done
    fi
    et le retour écran me donne ceci quand il y a eu 2 saisies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test4.ksh[27]: [2:  not found
    ca avec une saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test4.ksh[27]: [1:  not found
    et ça avec aucune saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test4.ksh[27]: [0:  not found
    moi je comprends plus rien. Me faire emmerder comme ça sur des commandes simples j'imagine à peine quand ça va se compliquer

  13. #13
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Oh P*****
    Ca y'est j'ai trouvé la bonne combinaison....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    est_vide=${#cube[*]}
    #si rien n'est renseigné par l'utilisateur  
    if [ $est_vide = "0" ]; then
      echo "vide"
    else
      for i in ${cube[@]}; do
        #Positionnement dans le dossier où le fichiers doivent être déposés par le STFP et à partir duquel le .ksh doit être exéxuté
        cd /home/ess_tms/temp/JTMS$i
        touch creation_ok.txt
      done
    fi

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Bien que ce soit une extension répandue et supportée par ksh, bash et autres, le shell POSIX ne connait pas les tableaux en dehors de la liste d'arguments passés en paramètre. C'est donc ce qu'il faut utiliser en priorité pour un script strictement portable.
    J'en prends note, car je pensais que ksh88 était considéré comme posix...


    Citation Envoyé par mederik Voir le message
    Désolé d'insister et de passer pour un lourd mais ça en ligne 4 ca fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    est_vide=${#cube[*]}
    #si rien n'est renseigné par l'utilisateur  
    if [$est_vide == 0]; then
    ...
    ...
    et le retour écran me donne ceci quand il y a eu 2 saisies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test4.ksh[27]: [2:  not found
    ca avec une saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test4.ksh[27]: [1:  not found
    et ça avec aucune saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test4.ksh[27]: [0:  not found
    moi je comprends plus rien. Me faire emmerder comme ça sur des commandes simples j'imagine à peine quand ça va se compliquer
    Ici, ton erreur est de ne pas avoir mis d'espace après ton '[' et avant ']'.
    '[' est une commande shell au même titre que par exemple 'test' et tu n'écris pas 'test$estvide' mais 'test $estvide' ...

  15. #15
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Rhâ forcément quand on a les explications..
    Merci

    Ici, ton erreur est de ne pas avoir mis d'espace après ton '[' et avant ']'.
    '[' est une commande shell au même titre que par exemple 'test' et tu n'écris pas 'test$estvide' mais 'test $estvide'

  16. #16
    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 842
    Points
    7 842
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    J'en prends note, car je pensais que ksh88 était considéré comme posix...
    Il l'est. Le shell POSIX est principalement inspiré des fonctionnalités ksh88. Il se trouve juste que les tableaux ne font pas partie du standard.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/05/2015, 18h28
  2. [MySQL] tester si un fetch array est vide
    Par boubourse92 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/04/2008, 13h30
  3. [XSL] Tester si la valeur est un entier dans un xml
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/07/2003, 05h35
  4. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 11h17
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 12h54

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