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 :

Récupérer un résultat commande bash


Sujet :

Shell et commandes POSIX

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Août 2018
    Messages : 56
    Points : 66
    Points
    66
    Par défaut Récupérer un résultat commande bash
    Bonjour,


    Pour les besoins de mon scripts en bash j'aimerai récupérer le résultat d'une commande, qui par la suite ce fameux résultat me servira pour le hostname les machines en questions.

    Je me sert de la mac adresse de la machine pour ensuite l'inclure dans le hostname

    Exemple :

    PC1 = toto14
    PC2 = toto8
    PC 3 = toto45

    Etc...

    Voici ma commande qui me permet de récupérer la mac adresse et par la même occasion de "cut" et de prendre qu'un seul morceau.

    ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}' | cut -d: -f7

    Nom : 86.PNG
Affichages : 178
Taille : 8,2 Ko

    ce que j'aimerai comme je l'ai dit, c'est prendre le résultat de la commande et d'y inclure le changement du hostname de la machine en prenant compte le résultat de la commande ci dessus.

    Une petite aide serait pas refus, merci

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom="$nom$(ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}' | cut -d: -f7 )"
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Août 2018
    Messages : 56
    Points : 66
    Points
    66
    Par défaut
    Merci pour l'aide

    Malheureusement pour moi ça fonctionne pas puisque j'ai l'erreur " Ligne 6 NF-2 : commande introuvable"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _HOSTNAME="$Abeille(ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}' | cut -d: -f7)"
    echo "$_HOSTNAME"> /etc/hostname
    echo "127.0.0.1 localhost" > /etc/hosts
    echo "127.0.0.1 ${_HOSTNAME}.localdomain ${_HOSTNAME}" >> /etc/hosts
    Nom : TEST1.PNG
Affichages : 166
Taille : 19,3 Ko

    En revanche si je laisse avec "$nom$" j'ai aucun résultat, ça change rien et le signe "$" deviens "grisé"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _HOSTNAME="$Abeille$(ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}' | cut -d: -f7)"
    echo "$_HOSTNAME"> /etc/hostname
    echo "127.0.0.1 localhost" > /etc/hosts
    echo "127.0.0.1 ${_HOSTNAME}.localdomain ${_HOSTNAME}" >> /etc/hosts
    Nom : TEST2.PNG
Affichages : 158
Taille : 20,1 Ko

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    La première syntaxe n'a aucun sens. Donc je ne commente même pas.

    Pour la seconde, rions ensemble. Ton code a tellement de coloration syntaxique que tu appelles "grisée", la couleur naturelle de ton code.
    De plus, tu découpes mal l'expression. Ce n'est pas $nom$, puis le reste, mais $nom, puis $( ), et le reste. $( ) est une substitution de commande. Je te laisse lire le paragraphe en exécutant cette commande (q pour quitter) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    man -P 'less -p"Substitution de commande"' bash
    Si cela ne fonctionne pas :
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Et sans pipe vers cut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ip -o link | awk -F: '$2 != " lo" {printf "%.2s\n", $(NF-5)}'
    Cordialement.
    Meilleurs voeux a tous.

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Août 2018
    Messages : 56
    Points : 66
    Points
    66
    Par défaut
    Hello

    Pour la seconde, rions ensemble. Ton code
    j'vois pas en quoi ça reste marrant... mais surement un type d'humour n'étant pas pour moi...

    @Ctac_ j'ai testé bien que j'ai tenté d'autre chose avec un semblant de résultat, puisque j'obtiens uniquement "D3" ce qui correspond bien à un emplacement de ma mac adresse mais pas avec le nom, ça prend uniquement "D3" j'dois pas pas être bien loin je pense, voici le message d'erreur que j'ai

    ligne 10: fin de fichier (EOF) prématurée lors de la recherche du « " » correspondant
    /home/admini/Documents/TESTATOM: ligne 11: erreur de syntaxe : fin de fichier prématurée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HOSTNAME="$TOTO" $(ip -o link | awk -F: '$2 != " lo" {printf "%.2s\n", $(NF-5)}')"
    echo "$HOSTNAME"> /etc/hostname
    echo "127.0.0.1 localhost" > /etc/hosts
    echo "127.0.0.1 ${HOSTNAME}.localdomain" ${HOSTNAME} >> /etc/hosts
    la ligne "10" correspond ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "127.0.0.1 ${HOSTNAME}.localdomain" ${HOSTNAME} >> /etc/hosts

    En revanche quand j'exécute ce scripts (bien que je récupère pas une partie de ma mac adresse) fonctionne bien et en soit ça fait le "job" mais bon... j'aurai aimé faire un truc un peu plus "punch"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    HOSTNAME="TOTO$RANDOM"
    echo "$HOSTNAME"> /etc/hostname
    echo "127.0.0.1 localhost" > /etc/hosts
    echo "127.0.0.1 ${HOSTNAME}.localdomain ${HOSTNAME}" >> /etc/hosts

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Qu'est-ce qui te surprend ? Tu as un nombre impair de ".
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Août 2018
    Messages : 56
    Points : 66
    Points
    66
    Par défaut
    Du coup j'ai résolu mon truc... je poste ici si jamais ça peut servir pour une autre personne avec des fonctions

    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
    21
    22
    23
    24
    25
    26
    27
    #!/bin/bash
     
    #Définir la fonction
    function creerCompteFormation () {
    adduser --disabled-password --shell /bin/bash --home /home/formation --quiet --gecos "formation" formation;echo -e "formation\nformation" | sudo passwd formation
    }
    #########
    #Créerfonctionuserdel
    function supprimerformation () {
    userdel --remove -f "formation"
    }
     
    printf "entrer 1 pour creer compte formation \n entrer 2 pour supprimer compte \n"
    read -p "veuillez saisir votre choix : " choix
    case $choix in
    1) creerCompteFormation
      echo "votre compte est creer"
    computername="ABEILLE-$(ip link show ens33 | grep link/ether | awk '{print $2} ' | cut -d ':' -f6)"
    echo "$computername"> /etc/hostname
    echo "127.0.0.1 localhost" > /etc/hosts
    echo "127.0.0.1 ${computername}.localdomain" ${computername} >> /etc/hosts
    ;;
    2) supprimerformation
      echo "Suppression OK"
      ;;
    *) echo "votre choix n'est pas valide"
    esac

  9. #9
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Un peu plus simple que l’enchaînement de tous ces outils :

    Et puisque l'on utilise ip route 2 dans la proposition de de départ, on va partir du postulat que c'est du linux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    export Mymac="$( cat /sys/class/net/$(ip route show default | awk ' {print $NF}')/address )"

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ip route show default | awk '{print $NF}'
    1002


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ip -o link | awk '$0 !~ "^[0-9]+: +lo:"{n=split($(NF-2),ar,":"); print ar[n]}'
    b9
    parce que grep|awk|cut, c'est dégueu.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed 's/.*://' /sys/class/net/*/address
    d1
    00
    3e
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 'F' /sys/class/net/*/address | sed 'N;/lo/d;s@.*/\(.*\)/.*\n.*:@\1 @'
    eno1 d1
    wlp3s0 3e
    [edit]
    @N_BaH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 's/.*://' /sys/class/net/[^l]*/address
    d1
    3e
    [/edit]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

Discussions similaires

  1. Résultat commande bash dans une variable
    Par psl dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 18/07/2016, 18h13
  2. Récupérer le résultat d'une commande scp
    Par vbcasimir dans le forum Linux
    Réponses: 19
    Dernier message: 20/05/2009, 17h14
  3. Récupérer le résultat d'une commande shell
    Par espadon1 dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 11h01
  4. Réponses: 5
    Dernier message: 31/05/2006, 20h30
  5. Réponses: 2
    Dernier message: 02/01/2006, 11h39

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