Programmation bash ou autre langage ?
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 33

Programmation bash ou autre langage ?



  1. #1
    invitec3dc65bc

    Programmation bash ou autre langage ?


    ------

    Bonjour, je suis novice en programmation et faisant peu de CLI hormis mes commandes réseau, j'ai formaté quelques commandes.
    J'ai un parc informatique de plusieurs dizaines d'équipement ( Parefeu, routeur, commutateur ) sans information recensée.
    J'ai donc à récupérer ces informations ( nom, IP, version .... ) sur chaque équipement.
    J'ai initié un tout petit script :

    Code:
    #!/bin/bash 
    #Interrogation des equipements de confHP
    ########################################
    ########################################
    # Mon dossier comprend plusieurs fichiers de configuration, ces fichiers sont identifies par un nom unique, ce premier GREP doit me retourner le nom de ce fichier.
    ls -l confHP
    echo
    # Ce second GREP doit me retourner l'adresse IP de equipement
    grep -R IP confHP
    echo
    # Ce troisieme GREP doit me retourner le numero de serie de equipement
    grep -R NSerie confHP
    echo
    # Ce quatrieme GREP doit me retourner le firmware de equipement
    grep -R Firmware confHP
    echo
    __________________________
    Le rendu n'est pas top car rien n'est organisé :
    Code:
    yoann@yoann-HP-ProBook-650-G1:~/Bureau$ ./test.sh
    total 8
    -rw-rw-r-- 1 yoann yoann 729 mai    3 16:53 'Equipement 1'
    -rw-rw-r-- 1 yoann yoann 728 mai    3 16:54 'Equipement 2'
    
    confHP/Equipement 1:IP=10.226.18.19
    confHP/Equipement 2:IP=10.226.18.20
    
    confHP/Equipement 1:NSerie=12po121545
    confHP/Equipement 2:NSerie=22po121545
    
    confHP/Equipement 1:Firmware=7.10.2
    confHP/Equipement 2:Firmware=7.8.1
    Je n'ai mis que quelques GREP pour plus de facilité et lisibilité, je pense que la gymnastique pour les autres GREP sera similaire.

    Comment retoucher le premier GREP pour n'avoir que le nom et non pas les droits et group, la création .... ?
    Comment organiser tous ces GREP pour avoir un meilleur rendu ?
    Le top du top pour moi serait un tableau avec pour chaque colonne un des champs demandé en GREP afin de renseigner facilement une intégration dans une base de données.
    J'espère que c'est limpide pour vous.
    Que me conseillez vous de faire pour optimiser ce script ? Changer de langage ?
    Merci d'avance.

    -----

  2. #2
    umfred

    Re : Programmation bash ou autre langage ?

    ton 1er GREP c'est la 2ème partie d'affichage, où tu affiches l'IP ...
    pour les 1ères informations, c'est un ls -1 confHP

  3. #3
    pm42

    Re : Programmation bash ou autre langage ?

    Code:
    #!/bin/bash 
    c1 =`ls confHP`
    c2 = `grep -R IP confH | awk -F : '{print $2}'`
    c3 = `grep -R NSerie confH | awk -F : '{print $2}'`
    c4 = `grep -R Firmware confH | awk -F : '{print $2}'`
    paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4")
    devrait marcher.

    On peut aussi mettre le résultat dans un fichier en ajoutant un '> fichier.csv' à la fin.

    Mais le mieux serait d'apprendre un peu avant de changer de langage parce que par exemple, "pour n'avoir que le nom et non pas les droits et group, la création", il suffit de passer de "ls -l" à "ls" et c'est la base.

  4. #4
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Merci pour l'argument, c'est ce que je voulais

  5. A voir en vidéo sur Futura
  6. #5
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Désolé pm42,
    Code:
    yoann@yoann-HP-ProBook-650-G1:~/Bureau$ ./test.sh
    ./test.sh: ligne 20: c1 : commande introuvable
    grep: confH: Aucun fichier ou dossier de ce type
    ./test.sh: ligne 21: c2 : commande introuvable
    grep: confH: Aucun fichier ou dossier de ce type
    ./test.sh: ligne 22: c3 : commande introuvable
    grep: confH: Aucun fichier ou dossier de ce type
    ./test.sh: ligne 23: c4 : commande introuvable
    ;;;
    Le résultat n'est plus bon du tout.
    Je reprend ton script, il y a des variables c1, c2 ... déclarées ensuite tu peux m'expliquer un peu plus, le AWK et le paste stp

  7. #6
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Désolé en relisant ton code, il y avait une erreur de saisie sur le nom de dossier et bash n'appréciait pas les espaces avant et après le symbole =
    A présent, ça donne :
    Code:
    #!/bin/bash 
    
    #Variables
    c1=`ls -1 confHP`
    c2=`grep -R IP confHP | awk -F : '{print $2}'`
    c3=`grep -R NSerie confHP | awk -F : '{print $2}'`
    c4=`grep -R Firmware confHP | awk -F : '{print $2}'`
    
    #Affichage code
    paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4")
    et le résultat
    Code:
    RESULTAT
    yoann@yoann-HP-ProBook-650-G1:~/Bureau$ ./test2.sh
    Equipement 1;IP=10.226.18.19;NSerie=12po121545;Firmware=7.10.2
    Equipement 2;IP=10.226.18.20;NSerie=22po121545;Firmware=7.8.1
    Ça prend une bonne forme.
    Si je veux que ces résultats soient retranscris sur un fichier.csv, ou dois je mettre cette extension?

  8. #7
    polo974

    Re : Programmation bash ou autre langage ?

    Bonjour,
    En bash il ne faut pas d'espace pour une affectation:
    c1="$(ls -1 ...)
    ...
    (Remplacer les ... par ce qu'il faut)

    En bash (et autres commandes) c'est super chiant d'avoir des espaces dans les noms de fichier...
    Et c'est rien de le dire...
    (Bon, je passe sur l'ordi...)
    Jusqu'ici tout va bien...

  9. #8
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    J'ajuste mais ca devient bon.
    Code:
    #!/bin/bash 
    
    #Variables
    # Mon dossier confHP comprend les fichiers de configuration des switchs HP.
    # c1 récupère le nom du switch.
    # c2 récupère l'adresse IP du switch.
    # c3 récupère le numéro de série du switch.
    # c4 récupère le firmware du switch.
    c1=`ls -1 confHP`
    c2=`grep -R IP confHP | awk -F : '{print $2}'`
    c3=`grep -R NSerie confHP | awk -F : '{print $2}'`
    c4=`grep -R Firmware confHP | awk -F : '{print $2}'`
    
    #Affichage code
    paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4")
    
    #Mise en forme de tableau
    tableau=('c1' 'c2' 'c3' 'c4')
    echo ${tableau[*]}
    et le resultat
    Code:
    yoann@yoann-HP-ProBook-650-G1:~/Bureau$ ./test2.sh
    Equipement 1;IP=10.226.18.19;NSerie=12po121545;Firmware=7.10.2
    Equipement 2;IP=10.226.18.20;NSerie=22po121545;Firmware=7.8.1
    c1 c2 c3 c4
    Petit souci avec la mise en page des résulats.
    J'aimerai avoir un tableau et exporter ce tableau dans un format csv ....
    Merci d'avance

  10. #9
    polo974

    Re : Programmation bash ou autre langage ?

    Bon, il y a la variable IFS qui contient les séparateurs de mots, d'habitude, c'est espace, tabulation et linefeed:
    Code:
    $ echo -n "$IFS" | od -a -An
      sp  ht  nl
    on peut la changer en virant l'espace:
    j'ai créé un dossier contenant 2 fichiers avec des noms "espacés":
    Code:
    $ tree space/
    space/
    ├── date 1
    └── date 2
    avant:
    Code:
    $ for i in $(ls space); do echo $i; done
    date
    1
    date
    2
    oups, ça découpe les noms de fichiers...

    et là, je positionne IFS avec seulement le retour à la ligne:
    Code:
    $ IFS="
    "
    $ for i in $(ls space); do echo $i; done
    date 1
    date 2
    ah, c'est mieux (mais attention... si vous êtes en ligne de commande interactive, n'oubliez pas que vous avez modifié IFS...)
    Jusqu'ici tout va bien...

  11. #10
    polo974

    Re : Programmation bash ou autre langage ?

    si ton csv doit contenir

    Code:
    Equipement 1;IP=10.226.18.19;NSerie=12po121545;Firmware=7.10.2
    Equipement 2;IP=10.226.18.20;NSerie=22po121545;Firmware=7.8.1
    tu as juste à rediriger le paste vers un fichier csv.

    si tu veux en plus la première ligne avec les noms des colonnes, tu fais un echo d'abord

    Code:
    echo "Equipement;IP;NSerie;Firmware" > x.csv
    paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4") >> x.csv
    (>> si première ligne, > si pas de première ligne)

    et si tu veux juste la valeur (par ex '7.8.1' et pas 'Firmware=7.8.1'), remplace -F : par -F = dans tes grep...


    sinon, au lieu de faire des grep et awk, j'aime bien le sed...
    Jusqu'ici tout va bien...

  12. #11
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Merci beaucoup Polo.
    Le dernier code que tu m'as donné a atteint mon objectif.
    Juste je n'ai pas saisi la réécriture de je te cite :
    et si tu veux juste la valeur (par ex '7.8.1' et pas 'Firmware=7.8.1'), remplace -F : par -F = dans tes grep...
    ___
    Effectivement c'est ce que je veux pour améliorer la lisibilité et curieux de voir ce code en sed, ca donnerait quoi ?

  13. #12
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Après relecture, je t'ai compris Polo.
    Actuellement, le code ressemble à :
    Code:
    #!/bin/bash 
    
    #Variables
    # Mon dossier confHP comprend les fichiers de configuration des switchs HP.
    # c1 récupère le nom du switch.
    # c2 récupère l'adresse IP du switch.
    # c3 récupère le numéro de série du switch.
    # c4 récupère le firmware du switch.
    dateJMA=`date "+%d/%m/%Y"`
    c1=`ls -1 confHP`
    c2=`grep -R IP confHP | awk -F = '{print $2}'`
    c3=`grep -R NSerie confHP | awk -F = '{print $2}'`
    c4=`grep -R Firmware confHP | awk -F = '{print $2}'`
    
    #Affichage code
    echo "Equipement;IP;NSerie;Firmware" > SwitchHP.csv
    paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4") >> SwitchHP-$dateJMA.csv
    Ca fonctionne bien.
    Pour faire bien j'ai rajouté une variable date au format JourMoisAnnée, que j'appelle dans la création du fichier résultat mais là ça merde, sûrement une erreur de syntaxe ( c'est fou la programmation, c'est bien plus simple le réseau ^^ )
    Je reste curieux de voir avec sed ce que ca donnerait mais déjà là ca me va. Merci bcp

  14. #13
    pm42

    Re : Programmation bash ou autre langage ?

    Citation Envoyé par Y0ann93 Voir le message
    Pour faire bien j'ai rajouté une variable date au format JourMoisAnnée, que j'appelle dans la création du fichier résultat mais là ça merde, sûrement une erreur de syntaxe (
    Non, tu as mis ta date au format 04/05/2021. Puis tu l'ajoute à un nom de fichier et les jours, mois et années entre les '/' sont donc interprétés comme des répertoires inexistants.
    Essaie avec : date "+%d_%m_%Y" ou date "+%d%m%Y" par exemple.

  15. #14
    polo974

    Re : Programmation bash ou autre langage ?

    Pour les dates, le mieux est souvant de mettre année mois jour pour garder un tri facile des fichiers.
    Perso j'utilise date "+%F"
    Qui donne 2021-05-04

    (Excuse pour le mélange grep awk pour l'option -T, mais tu as trouvé et corrigé)


    Pour le sed, au boulot, ils m'appellent le sorcier, mais c'est juste parce qu'ils ne prennent pas là peine de lire la doc...

    Bon, sinon, le shell est quand même assez limité pour faire des traitements comme le tien pour peu que ça se complique un peu...

    Perso j'(ab)use du python, d'autres aiment perl...

    Il y en a pour tous les goûts...
    Jusqu'ici tout va bien...

  16. #15
    polo974

    Re : Programmation bash ou autre langage ?

    Oups pour awk, -F et pas -T que le correcteur orthographique a collé...
    Dernière modification par polo974 ; 04/05/2021 à 18h12.
    Jusqu'ici tout va bien...

  17. #16
    Merlin95

    Re : Programmation bash ou autre langage ?

    @Polo peut-être mais avec une bonne maîtrise des outils gnu on peut faire plus de choses que ce à quoi on s'attendrait. Après l'habitude avec ces outils sont il est vrai pas tjrs évidents à maîtriser.

  18. #17
    polo974

    Re : Programmation bash ou autre langage ?

    Pour le sed:

    Code:
    c4="$( sed -n 's/Firmware=\(.*\)/\1/p' confHP/* )"
    sed -n pour ne rien sortir par défaut (ce qui permet de filtrer comme/sans grep)
    s/.../.../p pour substituer ET imprimer
    \(...\) pour mémoriser
    \1 pour restituer ( la première mémorisation, on peut en avoir plusieurs...)

    Bref, c'est très simple...

    (J'ai écrit depuis mon phone, il peut y avoir des bugs...)
    Jusqu'ici tout va bien...

  19. #18
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Erreur de débutant, je me suis lancé dans la réécriture du script avec les bons termes pour chaque GREP et j'ai trop chamboulé....
    Le script fonctionne mais ne ressort plus de données .... J'ai voulu faire un retour arrière mais ne retrouve pas la bonne formule :/
    Actuellement j'ai
    Code:
    #!/bin/bash 
    
    date=`date "+%F"`
    c1=`ls -1 confHP`
    c2=`grep -R IP confHP 		| awk -F : '{ print $2 }'`
    c3=`grep -R NSerie confHP 	| awk -F : '{ print $2 }'`
    c4=`grep -R Firmware confHP 	| awk -F : '{ print $2 }'`
    
    echo "Equipement;IP;NSerie;Firmware" > x-$date.csv
    paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4") >> x-$date.csv
    Fichier
    Code:
    IP=10.226.18.19
    NSerie=12po121545
    Firmware=7.10.2
    Modele=typeA
    NumModele=125461
    Resultat
    Nom : Capture du 2021-05-04 20-33-35.png
Affichages : 182
Taille : 5,9 Ko

  20. #19
    polo974

    Re : Programmation bash ou autre langage ?

    bon, 3 choses:
    • tu n'as pas lancé ton script depuis le bon dossier (celui contenant le (bon) dossier confHP), c'est ça qui pose pb
    • éviter mettre des tabulations comme séparateur dans les scripts car si tu copies/colles dans une console, bash va faire de la "proposition intelligente" forcement déconnante (tu as des tab dans les lignes c2=... à c4=...)
    • option -F = pour le awk (mais sed, c'est mieux (je lance juste un troll en disant ça...))

    bref, voici mon code:
    Code:
    #!/bin/bash
    [ -d confHP ] || { echo 'pas de dossier confHP'; exit 1; }
    cd confHP
    
    c1=`ls -1`
    echo $c1
    
    c2=`sed -n 's/^IP=\(.*\)/\1/p' $c1`
    c3=`sed -n 's/^NSerie=\(.*\)/\1/p' $c1`
    c4=`sed -n 's/^Firmware=\(.*\)/\1/p' $c1`
    cd ..
    
    {
     echo "Equipement;IP;NSerie;Firmware"
     paste -d';' <(echo "$c1") <(echo "$c2") <(echo "$c3") <(echo "$c4")
    } > x-`date "+%F"`.csv
    je vérifie que le dossier confHP existe
    j'affiche les fichiers traités
    en réutilisant c1 pour les sed, j'ai la certitude d'opérer dans le même ordre et les mêmes fichiers.
    le ^ dans le sed indique "début de ligne", donc une ligne commentée genre "#IP=5555" ne sera pas prise en compte
    les accolades permettent de regrouper la redirection dans le csv.
    Jusqu'ici tout va bien...

  21. #20
    polo974

    Re : Programmation bash ou autre langage ?

    et si ta liste de variables augmente:

    Code:
    #!/bin/bash
    [ -d confHP ] || { echo 'pas de dossier confHP'; exit 1; }
    
    # liste à compléter...
    liste="IP NSerie Firmware"
    
    cd confHP
    c1=`ls -1`
    
    echo $c1
    echo
    
    filter ()
    {
     sed -n 's/^'$1'=\(.*\)/\1/p' $c1
    }
    
    l0="Equipement"
    cmd="paste -d';' "'<(echo "$c1")'
    for val in $liste
    do
     l0="$l0;$val"
     cmd="$cmd "'<(filter $val)'
    done
    
    {
     echo "$l0"
     eval "$cmd"
    } | tee ../x-`date "+%F"`.csv
    
    cd ..
    il suffit d'ajouter les nouvelles variables dans la liste.

    j'ai créé une fonction filter pour la lisibilité (et la facilité)
    puis une boucle qui complète au fur et à mesure la ligne0 (les noms de variables) et la commande paste.
    et enfin, j'évalue la commande.

    j'ai mis un tee à la place de > pour le csv afin de voir vite fait ce qu'il se passe.

    il faut bien noter le jonglage entre les " et les ' pour n'évaluer qu'au "bon moment"...
    Jusqu'ici tout va bien...

  22. #21
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Oui Polo, le résultat ressemble exactement à ça sur mon switch.
    Désolé, je n'avais même pas remarqué que j'étais en message privé, j'avais cliqué sur ton pseudo pour te citer spécifiquement.
    Aucune confidentialité, j'avais modifié les numéros de série avec du rechercher-Remplacer.
    La sortie, un fichier scv m'ira parfaitement puisque par la suite je ferai l'import dans une base de données.

  23. #22
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Message manquant dans la chronologie, par inadvertance, j'ai basculé sur les mp


    Citation Envoyé par Y0ann93
    Merci Polo, tes explications sont claires et comprendre pourquoi et où je me trompe m'aide beaucoup.
    ...
    de rien,
    juste une question:
    ton fichier il ressemble (exactement) à ça?:
    Code:

    Slot 1:
    CPU 0:
    DEVICE_NAME : 5900AF-48G-4XG-2QSFP+ JG510A
    DEVICE_SERIAL_NUMBER : CN74FZL04S
    MAC_ADDRESS : 40B9-3CB7-109B
    MANUFACTURING_DATE : 2017-04-20
    VENDOR_NAME : HPE
    Fan 1:
    DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A
    DEVICE_SERIAL_NUMBER : CN83FDD1VY
    MANUFACTURING_DATE : 2018-04-04
    VENDOR_NAME : HPE
    Fan 2:
    DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A
    DEVICE_SERIAL_NUMBER : CN83FDD1P5
    MANUFACTURING_DATE : 2018-04-04
    VENDOR_NAME : HPE
    Power 1:
    DEVICE_NAME_yo : HPE A58x0AF 300W AC Power Supply JG900A
    DEVICE_SERIAL_NUMBER : CN73GN716C
    MANUFACTURING_DATE : 2017-03-26
    VENDOR_NAME : HPE
    Power 2:
    DEVICE_NAME : HPE A58x0AF 300W AC Power Supply JG900A
    DEVICE_SERIAL_NUMBER : CN73GN716W
    MANUFACTURING_DATE : 2017-03-26
    VENDOR_NAME : HPE
    Slot 2:
    CPU 0:
    DEVICE_NAME : 5900AF-48G-4XG-2QSFP+ JG510A
    DEVICE_SERIAL_NUMBER : CN74FZL04X
    MAC_ADDRESS : 40B9-3CB7-122F
    MANUFACTURING_DATE : 2017-04-21
    VENDOR_NAME : HPE
    Fan 1:
    DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A
    DEVICE_SERIAL_NUMBER : CN83FDD1W5
    MANUFACTURING_DATE : 2018-04-04
    VENDOR_NAME : HPE
    Fan 2:
    DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A
    DEVICE_SERIAL_NUMBER : CN83FDD1PV
    MANUFACTURING_DATE : 2018-04-04
    VENDOR_NAME : HPE
    Power 1:
    DEVICE_NAME : HPE A58x0AF 300W AC Power Supply JG900A
    DEVICE_SERIAL_NUMBER : CN73GN7169
    MANUFACTURING_DATE : 2017-03-26
    VENDOR_NAME : HPE
    Power 2:
    DEVICE_NAME : HPE A58x0AF 300W AC Power Supply JG900A
    DEVICE_SERIAL_NUMBER : CN73GN7171
    MANUFACTURING_DATE : 2017-03-26
    VENDOR_NAME : HPE
    Slot 3:
    CPU 0:
    DEVICE_NAME : 5900AF-48XG-4QSFP+ JC772A
    DEVICE_SERIAL_NUMBER : CN40FHC08V
    MAC_ADDRESS : BCEA-FA0F-A1BE
    MANUFACTURING_DATE : 2014-10-21
    VENDOR_NAME : HPE
    Fan 1:
    DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A
    DEVICE_SERIAL_NUMBER : CN3AFDD17Y
    MANUFACTURING_DATE : 2013-11-20
    VENDOR_NAME : HPE
    Fan 2:
    DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A
    DEVICE_SERIAL_NUMBER : CN3AFDD17K
    MANUFACTURING_DATE : 2013-11-20
    VENDOR_NAME : HPE
    Power 1:
    DEVICE_NAME : HPE A58x0AF 650W AC Power Supply JC680A
    DEVICE_SERIAL_NUMBER : CN48F6436S
    MANUFACTURING_DATE : 2014-08-15
    VENDOR_NAME : HPE
    Power 2:
    DEVICE_NAME : HPE A58x0AF 650W AC Power Supply JC680A
    DEVICE_SERIAL_NUMBER : CN48F643KQ
    MANUFACTURING_DATE : 2014-08-15
    VENDOR_NAME : HPE

    très important, les deux points aux différents endroits... des indentations régulières...
    (au fait, encadre le code avec la balise CODE (en mode avancé) pour garder l'indentation)
    si oui, c'est un format yaml.
    c'est une structure arborescente, et pour ça bash, c'est la misère (larmes de sang et tout ça...)...

    alors qu'en python3...

    ensuite, la sortie souhaitée ? ? ?


    enfin, sauf si pb de confidentialité, autant rester sur le fil public, quitte à massacrer les numéros de série et device name

  24. #23
    polo974

    Re : Programmation bash ou autre langage ?

    mais là, du coup, t'as reperdu l'indentation (si existante...)

    et les autres auront du mal à retrouver les morceaux, vu que c'est un mélange entre ta question et ma réponse...

    bon, je repose les questions:
    • fichiers en entrée ?
    • sortie attendue ?
    si tu veux mettre plusieurs fichiers (ou un dossier avec ces fichiers), tu peux les mettre dans un zip et mettre le zip en pièce jointe.
    Jusqu'ici tout va bien...

  25. #24
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Désolé, j'ai mal compris ta question.
    Ce qu'il se passe c'est sur mon switch : je passe la commande, ensuite je copie colle sur un gedit le résultat avec le nom de l'équipement.
    Pas d'indentation, juste chaque ligne qui s’enchaîne.
    Tous les résultats sont regroupés dans un dossier ((confHP) sur lequel je souhaite lancer le script
    La sortie attendue un csv en forme de tableau, ca permettra de le réutiliser plus facilement.

  26. #25
    polo974

    Re : Programmation bash ou autre langage ?

    donc en terme de niveaux:
    niveau 0 : nom du fichier
    niveau 1 : les slots (pas de : au bout)
    niveau 2 : les "devices" cpu, fan, power (avec : au bout)
    niveau 3: les infos des devices au format nom : info


    risque-t-il d'y avoir d'autres infos genre cpu 1 dans un appareil "boosté"? si oui, le format tableau va changer au fil du temps (ajout de colonnes)

    en sortie:
    veux-tu une ligne par fichier, par slot ou par device ?
    comment libeller les lignes et colonnes (combinaison des noms des niveaux) ?

    de toute façon, en shell, c'est galère...
    Jusqu'ici tout va bien...

  27. #26
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Non aucun risque de provoquer de décalages dans un tableau car tous nos switch HP sont du même type : Slot, Fan1&2, Power1&2 et chaque élément rend 3 informations.
    En sortie un tableau qui ressemblerait : 1 variable par colonne.
    Code:
    Ce sera le nom que je donnerai au fichier .txt extrait du switch	Variable 1 : ealswrhp5kirf1-lab
    Slot 1: 								Variable 2 : eapswrhp5kirf1-M1-lab
        CPU 0:
            DEVICE_NAME : 5900AF-48G-4XG-2QSFP+ JG510A 			Variable 3 ModeleM1
            DEVICE_SERIAL_NUMBER : CN74FZL04S 				Variable 4 NSerieM1
            MANUFACTURING_DATE : 2017-04-20 				Variable 5 DateM1
        Fan 1: 								Variable 6 eapswrhp5kirf1-M1-Fan1-lab
            DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A 	Variable 7 ModeleFan1M1
            DEVICE_SERIAL_NUMBER : CN83FDD1VY 				Variable 8 NSerieFan1M1
            MANUFACTURING_DATE : 2018-04-04 				Variable 9 DateFan1M1
        Fan 2: 								Variable 10 eapswrhp5kirf1-M1-Fan2-lab
            DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A 	Variable 11 ModeleFan2M1
            DEVICE_SERIAL_NUMBER : CN83FDD1P5 				Variable 12 NSerieFan2M1
            MANUFACTURING_DATE : 2018-04-04 				Variable 13 DateFan2M1
        Power 1: 								Variable 14 eapswrhp5kirf1-M1-Power1-lab
            DEVICE_NAME_yo : HPE A58x0AF 300W AC Power Supply JG900A 	Variable 15 ModelePower1M1
            DEVICE_SERIAL_NUMBER : CN73GN716C 				Variable 16 NSeriePower1M1
            MANUFACTURING_DATE : 2017-03-26 				Variable 17 DatePower1M1
        Power 2: 								Variable 18 eapswrhp5kirf1-M1-Power2-lab
            DEVICE_NAME : HPE A58x0AF 300W AC Power Supply JG900A 		Variable 19 ModelePower2M1
            DEVICE_SERIAL_NUMBER : CN73GN716W 				Variable 20 NSeriePower2M1
            MANUFACTURING_DATE : 2017-03-26 				Variable 21 DatePower2M1
    Slot 2: 								Variable 22 : eapswrhp5kirf1-M2-lab
        CPU 0:
            DEVICE_NAME : 5900AF-48G-4XG-2QSFP+ JG510A 			Variable 23 ModeleM2
            DEVICE_SERIAL_NUMBER : CN74FZL04S 				Variable 24 NSerieM2
            MANUFACTURING_DATE : 2017-04-20 				Variable 25 DateM2
        Fan 1: 								Variable 26 eapswrhp5kirf1-M2-Fan1-lab
            DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A 	Variable 27 ModeleFan1M2
            DEVICE_SERIAL_NUMBER : CN83FDD1VY 				Variable 28 NSerieFan1M2
            MANUFACTURING_DATE : 2018-04-04 				Variable 29 DateFan1M2
        Fan 2: 								Variable 30 eapswrhp5kirf1-M2-Fan2-lab
            DEVICE_NAME : HP A58x0AF bck(pwr)-frt(ports) Fan Tray JC682A 	Variable 31 ModeleFan2M2
            DEVICE_SERIAL_NUMBER : CN83FDD1P5 				Variable 32 NSerieFan2M2
            MANUFACTURING_DATE : 2018-04-04 				Variable 33 DateFan2M2
        Power 1: 								Variable 34 eapswrhp5kirf1-M2-Power1-lab
            DEVICE_NAME_yo : HPE A58x0AF 300W AC Power Supply JG900A 	Variable 35 ModelePower1M2
            DEVICE_SERIAL_NUMBER : CN73GN716C 				Variable 36 NSeriePower1M2
            MANUFACTURING_DATE : 2017-03-26 				Variable 37 DatePower1M2
        Power 2: 								Variable 38 eapswrhp5kirf1-M2-Power2-lab
            DEVICE_NAME : HPE A58x0AF 300W AC Power Supply JG900A 		Variable 39 ModelePower2M2
            DEVICE_SERIAL_NUMBER : CN73GN716W 				Variable 40 NSeriePower2M2
            MANUFACTURING_DATE : 2017-03-26 				Variable 41 DatePower2M2
    Là dans le code je n'ai mis que le slot 1 et 2 de l'environnement de lab mais il y a d'autres environnement dont certains ont jusqu'à 6 slots.
    Ca fait 20 variables par slot soit 120 variables pour un équipement composé de 6 slots. C'est énorme en terme de variable, il n'y a pas un autre moyen ?
    Ca risque d'être imbuvable.

  28. #27
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Dans le précédent code, je n'ai rajouté aucune indentation ( niveaux ).
    niveau 0 : nom du fichier
    niveau 1 : les slots (pas de : au bout)
    niveau 2 : les "devices" cpu, fan, power (avec : au bout)
    niveau 3 : les infos des devices au format nom : info

    Code:
    Ce sera le nom que je donnerai au fichier .txt extrait du switch	Variable 1 : ealswrhp5kirf1-lab
    Slot 1: 								Variable 2 : eapswrhp5kirf1-M1-lab
    CPU 0: DEVICE_NAME : 5900AF-48G-4XG-2QSFP+ JG510A 		        Variable 3 : ModeleM1
     DEVICE_SERIAL_NUMBER : CN74FZL04S 		                        Variable 4 : NSerieM1
     MANUFACTURING_DATE : 2017-04-20		                  	Variable 5 : DateM1
    J'ai supprimé les lignes d'informations MAC_ADDRESS et VENDOR_NAME qui ne me sont pas utile
    Avec les couleurs, c'est plus facile pour moi de visualiser. J'espère que ce sera aussi bon pour toi

    en sortie:
    veux-tu une ligne par fichier, par slot ou par device ? Une ligne par équipement, ca permettra de le réimporter plus facilement dans une Bdd
    comment libeller les lignes et colonnes (combinaison des noms des niveaux) ? Oui la première colonne serait le nom logique de l'équipement ( variable 1 ) et ci dessous dans les messages précédents tu retrouveras une dénomination pour chaque indicateur ( variable ).


    de toute façon, en shell, c'est galère...

  29. #28
    polo974

    Re : Programmation bash ou autre langage ?

    Ok, je commence à voir, tu considères qu'il y a toujours 1 seul cpu et que ce dernier te donne l'info du slot. Et dans ce slot, il y a 2 alims et 2 ventilos...

    Perso, je garderai la mac address, car si c'est pour de la maintenance, il y a aussi le côté config réseau où une règle tordue a besoin de la mac address, donc si tu changes le matos, il y en aura un qui te demandera "c'est quoi les mac du vieux et du nouveau, que j'ajuste les règles???"


    Tes variables ea......-M1-Fan1-lab ne contiennent rien
    Lignes 6, 10, 14, ...
    Jusqu'ici tout va bien...

  30. #29
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    tu considères qu'il y a toujours 1 seul cpu et que ce dernier te donne l'info du slot. Et dans ce slot, il y a 2 alims et 2 ventilos...
    C'est exactement ca.

    Perso, je garderai la mac address, car si c'est pour de la maintenance, il y a aussi le côté config réseau où une règle tordue a besoin de la mac address, donc si tu changes le matos, il y en aura un qui te demandera "c'est quoi les mac du vieux et du nouveau, que j'ajuste les règles???"
    On n'a jamais eu besoin jusqu'à présent. Les rares fois où on a eu besoin, on allait récupérer l'information mais on bosse principalement avec l'IP

    Tes variables ea......-M1-Fan1-lab ne contiennent rien
    Lignes 6, 10, 14, ...

    Ces variables là sont pour identifier les devices. C'est vraiment en repérage.
    Elles ne se trouveront pas en interrogeant dans le fichier.txt car c'est une réécriture du nom du fichier.
    Le fichier s'appellera ealswrhp5kirf1-lab.txt et l'identification des slots s'écrira eapswrhp5kirf1-M1-lab pour le slot 1 ....
    eal c'est Equipement Actif Logique
    eapc'est Equipement Actif Physique

  31. #30
    invitec3dc65bc

    Re : Programmation bash ou autre langage ?

    Suite car on ne peut plus modifier après 5mn de parution.

    Tes variables ea......-M1-Fan1-lab ne contiennent rien
    Lignes 6, 10, 14, ...

    Ces variables là sont pour identifier les devices. C'est vraiment du repérage.
    Elles ne se trouveront pas en interrogeant dans le fichier.txt car c'est une réécriture du nom du fichier.
    Le fichier s'appellera ealswrhp5kirf1-lab.txt et :
    l'identification des slots s'écrira eapswrhp5kirf1-M1-lab pour le slot 1 ....
    l'identification des FAN s'écrira eapswrhp5kirf1-Fan1-M1-lab pour le Fan 1 ....
    l'identification des FAN s'écrira eapswrhp5kirf1-Fan2-M1-lab pour le Fan 1 ....
    l'identification des POW s'écrira eapswrhp5kirf1-Power1-M1-lab pour le Power 1 ....
    l'identification des POW s'écrira eapswrhp5kirf1-Power2-M1-lab pour le Power 2 ....

    Petite nuance de syntaxe. Il n'y aura que 1 équipement logique qui comprendra un ou plusieurs équipements physique
    eal c'est Equipement Actif Logique
    eap c'est Equipement Actif Physique

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Langage de programmation
    Par invite6f381312 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 23/07/2020, 16h30
  2. Programmation en langage FBD
    Par inviteb75c5073 dans le forum Technologies
    Réponses: 0
    Dernier message: 07/06/2018, 22h18
  3. programmation langage c++
    Par invitee943b2a4 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 03/10/2016, 18h04
  4. Langage de programmation
    Par invite9ee247df dans le forum Électronique
    Réponses: 231
    Dernier message: 19/05/2014, 16h32
  5. Programmation en langage C
    Par inviteb67d1210 dans le forum Électronique
    Réponses: 3
    Dernier message: 27/04/2013, 20h50