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 :

Utilisation d'une fonction


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut Utilisation d'une fonction
    Bonjour,

    Je viens de mettre une fonction dans mon script par contre lors de l'exécution j'ai un message bizarre et je ne comprend pas pourquoi

    Le script
    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
     
    #!/bin/ksh
     
    #set -x
     
    control() {
    if [ $? !=0 ]
         then
    echo " il y a un icident dans le traitement "
         else
    echo " Fin du traitement "
    fi
    }
     
     
    noms_users=`cat /etc/passwd|awk -F":" '{print $1}'|grep "$1"` 1>/dev/null
     
    #***********CONTROLE COMMANDE*************
    control
    [...]

    Log d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /reptst : ./lsusers.ksh dmo
    ./lsusers.ksh: test: 0403-004 Spécifiez un paramètre avec cette commande.
     Fin du traitement
    ./lsusers.ksh: test: 0403-004 Spécifiez un paramètre avec cette commande.
     Fin du traitement
    ./lsusers.ksh: test: 0403-004 Spécifiez un paramètre avec cette commande.
     Fin du traitement

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Gloupsssss!!!!
    J'ai trouvé mon erreur je n'avais pas mis de commande dans ma séquence de z'if et patatrac
    Ben les débuts sont laborieux mais je ne vais pas lacher l'affaire ça c'est sur


  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Quelques remarques de passage :

    Pour un découpage aussi simple, il n'est pas forcemment utile de déployer l'artillerie lourde (awk). cut suffit amplement :

    Ensuite, dans les shells "modernes", les backquotes sont dépréciés en faveur de la syntaxe $(commande) (plus lisible etc) pour la sous-exécution.

    Enfin pour le grep "$1", le $1 correspond à quoi ici ? S'il s'agit du login de l'utilisateur dont on voulait vérifier l’existence dans /etc/passwd, il y a beaucoup plus simple. Ne pas oublier que le grep s'applique ici qu'au résultat du découpage, autrement dit : au nom de l'utilisateur.

    Cordialement,
    Idriss

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par AAWOOPY56 Voir le message
    Le script
    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
    #!/bin/ksh
    #set -x
    control() {
    if [ $? !=0 ]
         then
    echo " il y a un icident dans le traitement "
         else
    echo " Fin du traitement "
    fi
    }
     
    noms_users=`cat /etc/passwd|awk -F":" '{print $1}'|grep "$1"` 1>/dev/null
     
    #***********CONTROLE COMMANDE*************
    control
    [...]
    Bonjour. Autres petites remarques:
    Plutôt que faire un grep et envoyer le résultat sur la stdout pour ne tester que le status de retour, il vaut mieux utiliser l'option grep -q qui sert exactement à ça!

    Ta fonction "control" affiche un message en fonction du code retour de la dernière instruction précédente. Comme ce comportement est extrêmement spécifique, plutôt qu'utiliser un nom très générique comme "control", je choisirais un nom à la hauteur de la spécificité de la fonction comme "checkLastReturnValue".
    De plus, comme le code retour est très évanescent, la moindre insertion d'instructions risque de perturber son utilisation.
    Je choisirais donc, soit de l'utiliser sur la même ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noms_users=`cat /etc/passwd|cut -d":" -f1|grep -q "$1"`; checkLastReturnValue
    soit de stocker le code retour dans une variable passée explicitement à la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    noms_users=`cat /etc/passwd|cut -d":" -f1|grep -q "$1"`; RC=$?
    # blabla
    checkReturnValue $RC
    Dernière remarque: si tu veux du code "blindé" tu peux aussi utiliser l'option "set -e"... mais c'est assez contraignant!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  2. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  3. Réponses: 3
    Dernier message: 14/04/2006, 19h36
  4. Utilisation d'une fonction Transact-SQL ds une requête SQL
    Par Fl0ppeur dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 13h42
  5. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/08/2005, 15h51

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