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

Linux Discussion :

Extraire un argument parmis plusieurs en bash


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Extraire un argument parmis plusieurs en bash
    Bonjour,

    Voici mon problème : j'ai une variable $VAR1 qui contient par exemple "toto titi tata". Je voudrais extraire juste le premier mot : toto.

    Y a-t-il un moyen plus propre que faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function extract()
    {
        ARG1=$1
    }
     
    extract $VAR1
    echo $ARG1
    Merci pour vos réponses.

    Syl

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var1="toto titi tata"
    echo "${var1%% *}"
    toto
    voir : Remplacement des paramètres
    dans le man de bash.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut posix
    En utilisant les paramètres positionnels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var1="toto titi tata"
    set $var1
    echo $1

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    premier=`echo $VAR1 |cut -f1 -d' '`
    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]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Et bien, merci pour toutes ces réponses !

    Syl

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    ${parameter%%word} est POSIX, donc fi du cut pour une aussi simple 'substitution'.

    tous les shells ne sont pas POSIX, c'est sans doute la solution la plus portable.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ${parameter%%word} est POSIX, donc fi du cut pour une aussi simple 'substitution'.

    tous les shells ne sont pas POSIX, c'est sans doute la solution la plus portable.
    bonjour N_BAH, j'entends souvent parlé de POSIX peux-tu me dire ce que c'est car apparemment c'est un facteur à prendre en compte quand on créer des scripts, j'ai googler mais toutes les sources ne sont pas claires

    merci

    <EDIT>
    j'ai essayer ton code ${parameter%%word} avec mon ubunto virtualisé mais ça veux pas prendre en compte le signe % sais-tu pourquoi ? ça me retourne à la place de "%" "Ù"
    </EDIT>

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    pour ton ubuntu virtuel, je ne sais pas. ça fonctionne même sous dash...
    ?

    quand je tape POSIX dans google, les résultats sont édifiants.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par saw-next Voir le message
    bonjour N_BAH, j'entends souvent parlé de POSIX peux-tu me dire ce que c'est car apparemment c'est un facteur à prendre en compte quand on créer des scripts, j'ai googler mais toutes les sources ne sont pas claires
    Salut

    Linux est issu d'Unix. Ce système d'exploitation multi-utilisateur, multi-tâches a vu le jour autour des années 1970.
    Mais Unix, une fois créé, a été ensuite pris en charge par 2 entités distinctes
    - L'université de Berkeley, qui a donné la lignée des bsd (Berkeley Software Development)
    - La société AT&T (téléphonie) qui a donné la lignée des Unix system V

    Chaque Unix était similaire à l'autre mais avec quelques variantes. Par exemple, la commande "more" dans l'un était remplacée par "pg" dans l'autre. Ou bien l'un possédait un dossier "/bin" et "/usr/bin" pour distinguer les commandes liées à l'administration des commandes liées à l'utilisation ; et l'autre ne possédait qu'un "/bin".

    Un jour ça a gonflé tout le monde et il a été créé une norme appelée "POSIX". Norme devant être suivie par tous les Unix.
    Linux, qui est arrivé en 1994 et qui a été conçu sur les mêmes concepts qu'Unix a donc suivi la norme POSIX.

    La norme POSIX dit, par exemple, que l'option "-h" d'une commande est réservée à l'help. Si tu programmes une commande avec l'option "-h" qui fait autre chose, t'es pas dans la norme.

    Citation Envoyé par saw-next Voir le message
    j'ai essayer ton code ${parameter%%word} avec mon ubunto virtualisé mais ça veux pas prendre en compte le signe % sais-tu pourquoi ? ça me retourne à la place de "%" "Ù"
    Le Ubuntu, qu'il soit virtualisé dans VirtualBox, ou appelé en tant que système principal, fonctionne pareil. D'ailleurs ce n'est pas "Ubuntu" qui fait marcher un script mais un interpréteur (programme exécutable) qui se trouve être généralement /bin/bash

    Le mécanisme %% est connu à partir du bash (shell standard dans tous les Linux) donc si t'es en bash (tu le sauras en tapant echo $0), ça doit marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a="lac titicaca"
    echo ${a%%ca*}
    lac titi
    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]

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    merci beaucoup j'ai compris maintenant
    Mais reste encore le problème des "%".

    j'explique:

    c'est pas l'expression de N_BAH qui ne fonctionne pas ${parameter%%word} mais si je fais un % avec le clavier, ça m'affiche un Ù.

    merci à vous les gars

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par saw-next Voir le message
    mais si je fais un % avec le clavier, ça m'affiche un Ù.
    ...

    Appuie sur la touche "shift" et laisse-la appuyée quand tu appuies sur la touche "%"
    Ou alors, fais un copier-coller depuis ton PC (là où la touche "%" fonctionne) vers ta machine virtuelle (mais faut avoir installé les add-on invités pour ça)
    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]

  12. #12
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Bonjour Sve@r et désolé du retard "comme toujours d'ailleur "

    Citation Envoyé par Sve@r Voir le message
    ...

    Appuie sur la touche "shift" et laisse-la appuyée quand tu appuies sur la touche "%"
    c'est ce que j'ai essayer de faire la première fois mais c'est toujours le caractère Ù qui s'affiche au lieu de % n'y-a t'il pas une configuration à faire...dans le pire des cas
    y'a t'il dans ubunto un afficheur de caractère ASCII comme Charmap dans windows pour que je copie/colle le caractère

    Citation Envoyé par Sve@r Voir le message
    Ou alors, fais un copier-coller depuis ton PC (là où la touche "%" fonctionne) vers ta machine virtuelle (mais faut avoir installé les add-on invités pour ça)
    je crois que virtualBox à une fonction copier/coller mais je sais pas si ça fonctionnera

    merci en tout cas, tu m'as été d'une grande aide

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par saw-next Voir le message
    y'a t'il dans ubunto un afficheur de caractère ASCII comme Charmap dans windows pour que je copie/colle le caractère
    Il y en a un dans les démos de la librairie Qt. Mais faut te la compiler.
    Mais t'as essayé avec gedit ? Ou openoffice ? Arf, c'est vrai, aller installer openoffice sur un linux virtuel tu vas pleurer

    Au pire tu tapes et compile ce petit prog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <ctype.h>
     
    int main()
    {
        unsigned char i;
        for (i=0; i < 255; i++)
             printf("%d 0x%x %c\n", i, i, isprint(i) ?i :'.');
    }
    Ah zut, il faut taper du "%" là aussi.

    Essayons un code sans "%" (tout comme le roman "La disparition" a été écrit sans lettre "e"...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <ctype.h>
     
    int main()
    {
        unsigned char i;
        for (i=0; i < 255; i++)
             if (isprint(i)) fputc(i, stdout);
    }
    Donc ce petit prog t'affichera tous les caractères affichables. Ensuite... copier/coller !

    Citation Envoyé par saw-next Voir le message
    je crois que virtualBox à une fonction copier/coller mais je sais pas si ça fonctionnera
    Pour pouvoir copier/coller depuis le PC réel vers le PC virtuel (et inversement), faut obligatoirement installer les add-on invités. Si tu sais pas faire, je peux te faire une démo à base de captures d'écran...

    Citation Envoyé par saw-next Voir le message
    merci en tout cas, tu m'as été d'une grande aide
    Pas de pb...
    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]

  14. #14
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Bonjour mes ami(e)s

    Citation Envoyé par Sve@r Voir le message
    Si tu sais pas faire, je peux te faire une démo à base de captures d'écran...
    j'ai honte de dire oui ..mais ça sera trop demendé.. je suis nouveau dans le monde de linux, évader récemment du monde de win$, je sais pas trop quoi faire il y a tellement de fichiers de configuration qu'on se perd trop vite "je parle des néophytes comme moi" mais avec des gens compétents comme vous on trouve forcèmment nos repères, donc merci beaucoup

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

Discussions similaires

  1. [VBA-E]Fermer classeur EXCEL parmi plusieurs
    Par flyfrog dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/04/2006, 11h54
  2. [Access] extraire des champs de plusieurs tables
    Par ddeee dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2006, 16h45
  3. Sélection d'enregistrement parmis plusieurs identiques
    Par monnoliv dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/09/2005, 15h32
  4. Réponses: 2
    Dernier message: 24/08/2005, 10h59
  5. sélection d'un max parmi plusieurs champs
    Par invitésuprise dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/08/2005, 13h49

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