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 :

la commande expr


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Par défaut la commande expr
    Bonjour,
    Je suis en train de décrypter le fonctionnement d'un script écrit en Ksh et j'arrive pas à comprendre une ligne contenant expr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if expr "$ssline" : "[lg]" > /dev/null
         then
           # it is a saveset line
           ss=`echo "$ssline" | awk '{print $2}'
    ssline est une variable contenant une chaine apparement
    mais "[lg]" je n'arrive pas à le comprendre..
    Pourriez vous m'aider SVP
    Merci

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Voici ce que dit le
    :
    Effectue une recherche de sous-chaîne. Les arguments sont considérés comme des chaînes. Le second est une expression régulière avec un `^' ajouté implicitement au début. Le premier argument est comparé à ce motif. Si la correspondance réussit, et si une partie de la chaîne est encadrée par `\(' et `\)', cette partie sera renvoyée comme valeur de l'expression :. Sinon l'opération renvoie un entier représentant le nombre de caractères mis en correspondance. Si la comparaison échoue, l'opérateur : renvoie une chaîne nulle si l'encadrement `\(' et `\)' est utilisé, et renvoie 0 sinon. On ne peut utiliser qu'un seul encadrement `\(' et `\)'.
    Tu as donc affaire à une expression régulière.

    http://nicolasj.developpez.com/articles/regex/

    Tu peux voir au paragraphe III. une description de ce qu'est une classe telle qu'elle est utilisée dans ton problème.

    On cherche $ssline les caractères l ou g. ( à moins que ça ne soit le bloc lg, à vérifier ... )
    La classe bornée par les crochets permet d'exprimer un ensemble qui ici est constitué de deux lettres. l ou g.
    A noter que la documentation parle d'un ^ implicite qui signifie, que cette lettre doit être la première du mot contenu dans $ssline.

    Les expressions régulières peuvent être très très complexes, mais surtout très très utiles.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par condor_01 Voir le message
    Bonjour,
    Je suis en train de décrypter le fonctionnement d'un script écrit en Ksh et j'arrive pas à comprendre une ligne contenant expr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if expr "$ssline" : "[lg]" > /dev/null
         then
           # it is a saveset line
           ss=`echo "$ssline" | awk '{print $2}'
    ssline est une variable contenant une chaine apparement
    mais "[lg]" je n'arrive pas à le comprendre..
    Pourriez vous m'aider SVP
    Merci
    Si t'avais fait quelques tests en tapant directement
    expr "azerty" : "[a]"
    expr "azerty" : "[az]"
    expr "azerty" : "[aze]"
    expr "azerty" : "[ze]"
    expr "azerty" : "[e]"

    T'aurais vu que cette expression t'affiche 1 si la chaine n° 1 commence par la chaine n° 2 et t'affiche 0 sinon.
    Et en regardant le code retour, t'aurais vu que t'as 0 (vrai) quand expr t'affiche 1 et 1 (faux) quand il t'affiche 0

    T'as donc une alternative dépendant du le résultat (code d'état) de expr. si la variable "$ssline" commence par la chaine "lg", expr renvoie "vrai" et il fera le code then sinon il ne le fera pas.

    Quand t'as un doute sur une commande, exécute-là. Au-moins tu la verras en fonctionnement...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Par défaut
    Merci pour vos réponses.

Discussions similaires

  1. utilisation commande expr
    Par ben_tiba_asma dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/10/2011, 21h03
  2. Aide commande expr
    Par efelant dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 08/12/2008, 15h31
  3. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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