Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/03/2018, à 12:36

GuillaumeBTS

Script bash : générer un dhcpd.conf a partir d'un CSV

Bonjour,

Je suis actuellement entrain de chercher comment faire pour développer un Script Bash pouvant me générer les lignes suivantes qui correspondent aux lignes de mon fichier de configuration du DHCP :

            host exemple1 {
            hardware ethernet 00:00:00:00:00:00;
            fixed-address 192.168.1.1;
        }

        host exemple2 {
            hardware ethernet 11:11:11:11:11:11;
            fixed-address 192.168.1.2;
        }

Mon DHCP est fixé sur les adresses MAC des postes d’où la syntaxe ci-dessus.

Mon but est de faire un script Bash qui via un fichier excel au format CSV rempli de 3 colonnes comme ceci : host | Mac | IP
Mon script irait chercher dans le fichier CSV chaque ligne en prenant comme variables $host qui ressort le nom du PC, une variable $MAC qui ressort l'adresse mac et de même pour la variable $IP

Cependant je suis étudiant en réseau et je suis vraiment débutant dans ce genre d'exercice, je comprends la logique de mon but final mais je n'arrive pas a le mettre en œuvre. Je ne sais pas comment m'y prendre il faudrait quelque chose comme ça :

echo host $HOST {
echo  hardware ethernet $MAC;
echo fixed-address $IP;
echo }

En recherchant un peu sur internet j'ai vu parler de la commande awk et cut j'ai fais quelques test mais je n'y arrive pas.

Est-ce que certaines personnes s'y connaissent mieux que moi, ont déjà eu quelque chose du genre à faire, en clair est ce que quelqu’un peut m'aider ?

Merci

Hors ligne

#2 Le 13/03/2018, à 12:52

pingouinux

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Bonjour,
Tu peux partir de quelque chose de ce genre :

while IFS="| " read HOST MAC IP
do
echo "
host $HOST {
hardware ethernet $MAC;
fixed-address $IP;
}"
done <fichier.csv

Il faudra sauter l'en-tête du fichier .csv.

Hors ligne

#3 Le 13/03/2018, à 13:46

credenhill

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

hello

$ cat fichier.csv
exemple1;00:00:00:00:00:00;192.168.1.1
exemple2;11:11:11:11:11:11;192.168.1.2
$ awk -F ";" '{print "host" ,$1, "{\n  hardware ethernet", $2 ";\n  fixed-address", $3 ";\n}\n"}' fichier.csv
host exemple1 {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.1;
}

host exemple2 {
  hardware ethernet 11:11:11:11:11:11;
  fixed-address 192.168.1.2;
}

edit: remplacé | par  ;

Dernière modification par credenhill (Le 13/03/2018, à 14:50)

Hors ligne

#4 Le 13/03/2018, à 14:12

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Merci pour vos réponses je vais essayer tout ça bientôt, cependant petite erreur de ma part mon fichier CSV est séparé par un " ; " et non un pipe

Dernière modification par GuillaumeBTS (Le 13/03/2018, à 14:21)

Hors ligne

#5 Le 13/03/2018, à 15:15

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

J'ai essayé le premier pour le moment ca fonctionne a un détail près, je dois mettre a la fin de la derniere colonne dans mon fichier CSV un point virgule et enlever dans mon script le point virgule de la ligne : fixed-address $IP;

Ici mes lignes ressortent comme il faut, après en effet la première ligne ressort avec le nom des colonnes, il y a un moyen de l'enlever ?

Merci je vais essayé le deuxieme script en attendant.

Hors ligne

#6 Le 13/03/2018, à 15:32

Watael

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

"en attendant" quoi ? que tu cherches/proposes, toi-même, une hypothèse/solution ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 13/03/2018, à 15:50

MicP

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Bonjour

GuillaumeBTS a écrit :

…la première ligne ressort avec le nom des colonnes, il y a un moyen de l'enlever ?…

Peut-être comme ça :

michel@debg53sw:~$ cat fichier.csv
nomHost;adrMAC;adrIP
exemple1;00:00:00:00:00:00;192.168.1.1
exemple2;11:11:11:11:11:11;192.168.1.2
michel@debg53sw:~$ 
michel@debg53sw:~$ awk -F ";" 'NR>1{print "host" ,$1, "{\n  hardware ethernet", $2 ";\n  fixed-address", $3 ";\n}\n"}' fichier.csv
host exemple1 {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.1;
}

host exemple2 {
  hardware ethernet 11:11:11:11:11:11;
  fixed-address 192.168.1.2;
}

michel@debg53sw:~$ 

Hors ligne

#8 Le 13/03/2018, à 20:54

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Merci pour ta réponse je vais essayer demain dès que possible car j'ai du passer sur les postes pour mettre la configuration IP en DHCP et dès que s'est fait je me re occupe de ce script

Hors ligne

#9 Le 16/03/2018, à 12:49

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

J'ai réussi pour ça. Est-il possible que tout ce qui est écris grâce à ce script soit ressorti dans un fichier car pour le moment lorsque j’exécute ce script il m'affiche le résultat qui est le bon certes mais il me le faut dans un fichier.

Je demande pas forcement la réponse je cherche à savoir si c'est possible

Merci

Hors ligne

#10 Le 16/03/2018, à 14:24

credenhill

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

oui
écrase fichier si il existe, sinon il est  créé

commande > fichier

ajoute à la fin de fichier

commande >> fichier

affiche à l'écran et crée fichier

commande | tee > fichier

Dernière modification par credenhill (Le 16/03/2018, à 14:28)

Hors ligne

#11 Le 16/03/2018, à 15:37

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

C'est ce que j'ai trouvé juste avant d'aller manger, c'est super merci.

Il ne me reste plus qu'a prévoir l'ajout du nouveau fichier de conf dhcp automatiquement si le fichier CSV que j'importe est récent.

Merci à tous pour vos réponses

Hors ligne

#12 Le 16/03/2018, à 17:11

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Re,

Je reviens vers vous peut être que vous aurez des indications. Le but final serait d'insérer dans le script deux conditions : la premiere est d'écrire le résultat du script et donc du fichier de configuration du dhcp SI la date et surtout l'heure d'importation de mon fichier CSV est inférieur à 1h par rapport a la date de ma machine puis redémarrer le service dhcp pour appliquer les modifications.

Dans le cas contraire il ne se passe rien le script ne s’exécute pas il ne fera rien.

j'ai trouvé les commandes afin d'afficher l'heure d'importation du fichier et l'heure de la machine
L'idée serait donc :
if date -r fichier.csv < date +%R - 1h
then
ecrire le fichier (remplacer l'ancien) + systemctl restart isc-dhcp-server.service
else
ne rien faire
fi

Voila ce que j'ai pu développer cependant je ne sais pas comment faire la comparaison pour le moment

Hors ligne

#13 Le 16/03/2018, à 17:40

MicP

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Bonjour

date +%s -d 'today'

retourne la date/heure du système en nombre de secondes depuis le 01/01/1970 UTC à 00:00

=======

stat -c %Y fichier.csv

retourne la date/heure date de la dernière modification d’état du fichier fichier.csv en nombre de secondes depuis le 01/01/1970 UTC à 00:00

=======
Donc :

if [[ "$(stat -c %Y fichier.csv)" < "$(date +%s -d 'today - 1 hour')" ]]; then 
    ecrire le fichier (remplacer l'ancien)
    systemctl restart isc-dhcp-server.service
fi

Dernière modification par MicP (Le 17/03/2018, à 09:00)

Hors ligne

#14 Le 16/03/2018, à 17:49

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Bonjour, merci pour ta réponse cependant lorsque j'execute cette commande stat -c %Y fichier2.csv la réponse est constitué de 10 chiffres à la suite. Je ne sais pas ce qu'ils veulent dire. Peux tu m'en dire un peu plus ?

Hors ligne

#15 Le 16/03/2018, à 17:54

MicP

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

La commande stat -c %Y fichier.csv retourne 10 chiffres (quand ce fichier sera créé en l'année 2286, il y aurait 11 chiffres).
Ces 10 chiffres représentent le nombre de secondes passées
entre :
le 1er janvier 1970 à 00:00
et
la date/heure de la dernière modification d’état du fichier fichier.csv

=====
Si tu remplaces les10chiffres par les 10 chiffres qui ont été retournés par stat -c %Y fichier.csv
dans la commande ci-dessous :
date +%s -d@les10chiffres
cette commande te retournera la date/heure de la dernière modification d’état du fichier fichier.csv

=======
Par contre, avec :

date +%R -d 'today - 1 hour'

on a bien l'heure actuelle (moins une heure) et les minutes affichées,
mais c'est une chaîne de caractère (plus difficile à comparer)
et qui ne tient pas compte du jour, du mois et de l'année actuelle.

Dernière modification par MicP (Le 16/03/2018, à 19:24)

Hors ligne

#16 Le 19/03/2018, à 10:13

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Bonjour, je reviens la dessus. Je pense qu'il faut prendre en compte la date finalement car mon fichier est importé hier par exemple a 16h20 et qu'aujourd'hui à 17h le script se lance il va croire que le fichier vient d'être importé or ce n'est pas forcément le cas

Hors ligne

#17 Le 19/03/2018, à 11:01

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Si je tape cette commande : stat -c %y monfichier.csv il me retourne la date et l’heure sous cette forme : 2018-03-16 15:08:43.922354053 +0100

ou alors : date -r monfichier.csv est égal niveau retour de date et heure à la commande "date" tout simplement

Est-il possible de comparer ce résultat avec l'heure actuelle de la machine ?

Dernière modification par GuillaumeBTS (Le 19/03/2018, à 11:09)

Hors ligne

#18 Le 19/03/2018, à 11:31

pingouinux

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Il faut comparer

stat -c %Y monfichier.csv

et

date +%s

Hors ligne

#19 Le 19/03/2018, à 11:42

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

pingouinux a écrit :

Il faut comparer

stat -c %Y monfichier.csv

et

date +%s

Si je compare cest deux la en mettant pour le deuxieme 'today - 1 hour' ca prend en compte ou bien il faut d’abord le convertir en forme normale ?

Hors ligne

#20 Le 19/03/2018, à 11:46

MicP

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

GuillaumeBTS a écrit :

…Si je tape cette commande : stat -c %y monfichier.csv il me retourne la date et l’heure sous cette forme : 2018-03-16 15:08:43.922354053 +0100…

C'est vrai.

=======
Par contre, si tu tapes la commande suivante :

stat -c %Y monfichier.csv

il te retournera le nombre de secondes écoulées entre :

le 1er janvier 1970 à 00:00 UTC
et
la date/heure de la dernière modification d’état du fichier monfichier.csv

=======
Voir les pages man

de la commande stat :

man --pager='less -p "%y"' stat

et de la commande date :

man --pager='less -p "%s"' date

Dernière modification par MicP (Le 19/03/2018, à 12:02)

Hors ligne

#21 Le 19/03/2018, à 11:57

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Du coup il faudrait que je fasse -3600 pour moins 1 heure ?

Pour la syntaxe je sais pas du tout donc ne soyez pas effrayé par ce que je vais mettre mais mon idée serait quelque chose comme ça : if [stat -c %Y fichiercsv.csv < date +%s '- 3600']

Dernière modification par GuillaumeBTS (Le 19/03/2018, à 11:58)

Hors ligne

#22 Le 19/03/2018, à 12:02

MicP

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

michel@debg53sw:~$ echo $(( $(date +%s) - $(date +%s -d 'today - 1 hour') ))
3600
michel@debg53sw:~$
michel@debg53sw:~$ echo $(( $(date +%s) - $(date +%s -d 'today - 3600 seconds') ))
3600
michel@debg53sw:~$ 
michel@debg53sw:~$ date; date -d 'today -1 hour'
lundi 19 mars 2018, 11:11:16 (UTC+0100)
lundi 19 mars 2018, 10:11:16 (UTC+0100)
michel@debg53sw:~$ 
michel@debg53sw:~$ date +%s; date +%s -d 'today -1 hour'
1521454317
1521450717
michel@debg53sw:~$ echo $(( 1521454317 - 1521450717 ))
3600
michel@debg53sw:~$

=======

GuillaumeBTS, dans son message #16 a écrit :

…il faut prendre en compte la date finalement car mon fichier est importé hier par exemple a 16h20 et qu'aujourd'hui à 17h le script se lance il va croire que le fichier vient d'être importé or ce n'est pas forcément le cas.

C'est bien ce dont j'avais déjà tenu compte dans le script que je t'ai proposé dans mon message #13

Dernière modification par MicP (Le 19/03/2018, à 12:22)

Hors ligne

#23 Le 19/03/2018, à 12:16

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

Ok merci pour tout ça, j'ai donc ce qu'il faut il me faut juste la syntaxe que je test dans un script à part pour le moment je pars la dessus :

#!/bin/bash
if (($(stat -c %Y 19216895.csv) <  $(date +%s -d 'today - 1 hour'))) then
echo "oui"
else
echo "non"
fi

Modération : merci d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 19/03/2018, à 12:25)

Hors ligne

#24 Le 19/03/2018, à 12:25

MicP

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

#!/bin/bash
if [[ "$(stat -c %Y 19216895.csv)" < "$(date +%s -d 'today - 1 hour')" ]]; then 
    echo "oui"
else
    echo "non"
fi

Mais en fait, il vaudrait mieux utiliser un autre opérateur de comparaison plus adapté aux valeurs numériques

#!/bin/bash
if [[ "$(stat -c %Y 19216895.csv)" -lt "$(date +%s -d 'today - 1 hour')" ]]; then 
    echo "oui"
else
    echo "non"
fi

Dernière modification par MicP (Le 19/03/2018, à 12:42)

Hors ligne

#25 Le 19/03/2018, à 12:34

GuillaumeBTS

Re : Script bash : générer un dhcpd.conf a partir d'un CSV

MicP a écrit :
#!/bin/bash
if [[ "$(stat -c %Y 19216895.csv)" < "$(date +%s -d 'today - 1 hour')" ]]; then 
    echo "oui"
else
    echo "non"
fi

J'ai écris ton code et j'ai les mêmes erreurs que pour mes codes :

testcompare.sh: 2: testcompare.sh: cannot open 1521451976: No such file
testcompare.sh: 2: testcompare.sh: [[: not found
non

Hors ligne