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 :

Comment récupérer le résutat d'une commande unix dans une variable


Sujet :

Linux

  1. #1
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut Comment récupérer le résutat d'une commande unix dans une variable
    bonjour,
    je voudrais faire un script en shell de bourne, et dans ce script, je voudrais affecter le résultat de la commande date dans une variable quelqconque (par exemple $var).
    comment dois je faire ?
    merci.
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Ce sont des back-quotes ou back-ticks, obtenus avec [Alt Gr]+[7]
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    ok, merci bcp.
    mais une fois affecté à la variable ($var), comment fait on pour isoler des parties de la date ? y'a t il un equivalent de regexp en shell de bourne ?
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Deux solutions :
    • - tailler dans la date à coup de cut/awk/perl
      - utiliser la spécification de format de la fonction date pour n'avoir que ce qui nous intéresse.


    La première méthode est à utiliser quand on a plusieurs parties à récupérer dans la même date.

    La seconde méthode est adaptée si l'on veut juste récupérer une info donnée. Elle repose sur le fonctionnement du date de GNU et de son oprion de formattage (des trucs du genre "+(%d) %B").

    En outre, la seconde méthode ne dispense pas forcément de faire des cut ... elle peut même les faciliter en plaçant dans la date des délimiteurs choisis entre les différentes valeurs sorties.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    ok, je vais essayer avec cut/awk/perl, mais je ne connais pas encore la syntaxe pour cette commande. est-ce "cut", "awk" ou "perl" la commande ?
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  6. #6
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    j'utilise unix dans une université, et je ne suis pas sur que gawk est installé.
    par contre, cut l'est.
    je dis cela car en ayant tapé man awk, il n'y a pas de documenttation, il y'en a pour cut.
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  7. #7
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    voici mon code, mais je sais qu'il n'est pas terrible car il confondrait mardi et mars.
    si quelqu'un a une meilleure soluce, merci.
    de plus, il n'affiche pas non plus le numéro du jour dans le mois, ni l'année
    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
     
    #!/bin/sh
    var=`date`
    for i in $var
    do
    case $i in
        lun) jour=Lundi;;
        mar) jour=Mardi;;
        etc...
    esac
    case $i in
       jan) mois=janvier;;
       mar) mois=mars;;
       etc...
    esac
    done
    echo $jour $mois
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  8. #8
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par 2Eurocents
    Deux solutions :
    • - tailler dans la date à coup de cut/awk/perl
      - utiliser la spécification de format de la fonction date pour n'avoir que ce qui nous intéresse.
    je n'ai pas le droit d'utiliser du perl, car c'est un cours de systeme d'exploitation, ce doit etre en langage shell de bourne
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Juste pour savoir ...

    Quel est l'unix ?

    Que donne cette commande ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  10. #10
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    date coreutils 5.2.1
    2004 écrit pas david mackenzie, free software foundation
    par contre, pour connaitre la version d'unix ? quelle est la commande ?
    je crois que c'est une debian (avant ce devait etre un sco unix)
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par harlock59
    date coreutils 5.2.1
    2004 écrit pas david mackenzie, free software foundation
    Alors c'est bien le GNU date !

    Regarde le man de date, à la partie spécification de format. Tu y verras tout l'intérêt de faire un Ca permet, ensuite, d'utiliser cut à loisir, sur des informations pertinentes.

    Citation Envoyé par harlock59
    par contre, pour connaitre la version d'unix ? quelle est la commande ?
    je crois que c'est une debian (avant ce devait etre un sco unix)
    permet déjà de se faire une bonne idée.


    P.S. Juste pour info, c'est un cours système dans quel établissement ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  12. #12
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    en effet, j'ai trouvé une solution en faisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    jour=‘date +%A‘
    num_jour=‘date +%d‘
    mois=‘date +%B‘
    annee=‘date +%Y‘
    echo " "
    echo aujourd"'"hui, nous sommes le
    echo $jour $num_jour $mois $annee
    echo " "
    mais j'aimerais quand meme en savoir plus sur cut/awk/perl
    y'a t il des pages de tuto sur cette commande sur le net ?
    car perl est un langage a part entiere, non ?
    peut on utiliser cut/awk/perl en shell de bourne ?
    merci.
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  13. #13
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par harlock59
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    jour=‘date +%A‘
    num_jour=‘date +%d‘
    mois=‘date +%B‘
    annee=‘date +%Y‘
    echo " "
    echo aujourd"'"hui, nous sommes le
    echo $jour $num_jour $mois $annee
    echo " "
    Cette démarche, pour satisfaisante qu'elle est, possède une (toute petite) vulnérabilité ...

    Tu fais plusieurs appels successifs à date pour récupérer les différentes portions de l'information. Le problème, c'est que le temps passe (un peu) entre deux appels.

    C'est vrai que la probabilité que la date change pendant l'exécution d'un tel script est minime, mais elle n'est pas totalement nulle.

    C'est pourquoi il est préférable de ne faire qu'un appel à date qui récupère toutes les informations d'un coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    infodate=‘date +%A:%d:%B:%Y‘
     
    jour=`echo $infodate | cut -f 1 -d ":"
    num_jour=‘echo $infodate | cut -f 2 -d ":"mois=‘echo $infodate | cut -f 3 -d ":"annee=‘echo $infodate | cut -f 4 -d ":"
    Citation Envoyé par harlock59
    mais j'aimerais quand meme en savoir plus sur cut/awk/perl
    y'a t il des pages de tuto sur cette commande sur le net ?
    car perl est un langage a part entiere, non ?
    peut on utiliser cut/awk/perl en shell de bourne ?
    merci.
    cut, awk et perl sont trois outils/commandes distinctes.

    Aucune de ces trois commande n'est une commande native du shell. Ce sont trois commandes externes.

    Cut est une commande qui permet le découpage en champs d'une ou plusieurs lignes de textes.

    Awk est un langage de traitements plus complexes. On peut soit écrire des scripts awk, soit invoquer awk en lui passant un traitement simple à faire depuis la ligne de commande.

    Perl est dans le même cas que awk. Soit on fait un script autonome, soit on écrit un truc qui tient en une ligne pour faire le traitement qui nous intéresse.

    Tous ces outils peuvent, bien sûr, être invoqués depuis un shell de bourne.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  14. #14
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par harlock59
    y'a t il des pages de tuto sur cette commande (cut par exemple) sur le net ?
    merci.
    Citation Envoyé par 2Eurocents
    Aucune de ces trois commande n'est une commande native du shell. Ce sont trois commandes externes.
    mais alors comment se fait-il qu'elle fonctionne (cut) de maniere naturelle dans un script shell (sh)

    Citation Envoyé par 2Eurocents
    Cut est une commande qui permet le découpage en champs d'une ou plusieurs lignes de textes.

    Awk est un langage de traitements plus complexes. On peut soit écrire des scripts awk, soit invoquer awk en lui passant un traitement simple à faire depuis la ligne de commande.

    Perl est dans le même cas que awk. Soit on fait un script autonome, soit on écrit un truc qui tient en une ligne pour faire le traitement qui nous intéresse.

    Tous ces outils peuvent, bien sûr, être invoqués depuis un shell de bourne.
    je crois que j'ai compris: elles ont été rajoutées depuis la création du shell de bourne, c'est çà ?
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  15. #15
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par harlock59
    y'a t il des pages de tuto sur cette commande (cut par exemple) sur le net ?
    les examples des pages de man, à la limite ...

    Citation Envoyé par harlock59
    Citation Envoyé par 2Eurocents
    Aucune de ces trois commande n'est une commande native du shell. Ce sont trois commandes externes.
    mais alors comment se fait-il qu'elle fonctionne (cut) de maniere naturelle dans un script shell (sh)
    Parce que son chemin d'accès est dans le contenu de la variable d'environnement $PATH.

    Toute commande externe trouvable par les répertoires contenus dans le $PATH fonctionnera (presque) comme si elle était intégrée au shell.

    Les commandes natives du shell sont celles dont on trouve la liste dans le man de sh (ou de bash, à la limite).
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  16. #16
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    de chez moi (sous mac os x.3 panther), ça donne:
    uname -v
    Darwin Kernel Version 7.9.0: Wed Mar 30 20:11:17 PST 2005; rootnu/xnu-517.12.7.obj~1/RELEASE_PPC
    mais à la fac, j'ai pas eu le temps de regarder (et comme c'est de la fac que je bossais, tant pis...).
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  17. #17
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    j'ai lu la page man de cut, et je voulais juste savoir si au lieu de faire 4 cut sur 4 lignes successives, on ne pouvait pas plutot faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var=‘date +%A:%d:%B:%Y‘
    cut -f 1-4 -d ":" $var
    echo
    vu que c'est à chaque fois le meme délimiteur

    en fait, non, c'est bon, j'ai compris pkoi ce n'est pas possible, c'est parceque sinon, on se retrouve avec un seule variable et donc ça ne sert plus à rien d'avoir fait un cut.
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  18. #18
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par 2Eurocents
    `date` (Ce sont des back-quotes ou back-ticks, obtenus avec [Alt Gr]+[7])
    sur mac, c'est [option-4] (ou encore [alt-'], mais alt=option sur mac et ' et 4 sont sur la meme touche...;-))
    --
    Dépanneur Informatique à Domicile dans le Valenciennois
    https://www.depannage-informatique-valenciennes.site/

  19. #19
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Citation Envoyé par harlock59
    Citation Envoyé par 2Eurocents
    `date` (Ce sont des back-quotes ou back-ticks, obtenus avec [Alt Gr]+[7])
    sur mac, c'est [option-4] (ou encore [alt-'], mais alt=option sur mac et ' et 4 sont sur la meme touche...;-))
    oui c'est l'une des raisons, outre la lisibilité, qui fait que la syntaxe ACTUELLE est :
    de plus cette syntaxe est plus logique dans la mesure ou $VAR est le resultat d'un test ou lecture de VAR tout comme $(commande) et le test du RESULAT
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  20. #20
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par MarcG
    oui c'est l'une des raisons, outre la lisibilité, qui fait que la syntaxe ACTUELLE est :
    Je devrais pourtant le savoir, à force de le lire

    On ne se défait pas comme ça de ses plus anciennes habitudes ...

    Heureusement pour moi que la syntaxe "old style" (dixit le man) est encore supportée.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/09/2010, 14h15
  2. Réponses: 8
    Dernier message: 26/03/2010, 08h16
  3. Réponses: 8
    Dernier message: 19/09/2007, 16h51
  4. Réponses: 11
    Dernier message: 06/12/2005, 08h23

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