#1 Le 13/03/2018, à 11: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, à 11: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, à 12: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, à 13:50)
Hors ligne
#4 Le 13/03/2018, à 13: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, à 13:21)
Hors ligne
#5 Le 13/03/2018, à 14: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, à 14: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, à 14:50
- MicP
Re : Script bash : générer un dhcpd.conf a partir d'un CSV
Bonjour
…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, à 19: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, à 11: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, à 13: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, à 13:28)
Hors ligne
#11 Le 16/03/2018, à 14: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, à 16: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, à 16: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, à 08:00)
Hors ligne
#14 Le 16/03/2018, à 16: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, à 16: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, à 18:24)
Hors ligne
#16 Le 19/03/2018, à 09: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, à 10: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, à 10:09)
Hors ligne
#18 Le 19/03/2018, à 10: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, à 10:42
- GuillaumeBTS
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
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, à 10:46
- MicP
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…
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, à 11:02)
Hors ligne
#21 Le 19/03/2018, à 10: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, à 10:58)
Hors ligne
#22 Le 19/03/2018, à 11: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:~$
=======
…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, à 11:22)
Hors ligne
#23 Le 19/03/2018, à 11: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, à 11:25)
Hors ligne
#24 Le 19/03/2018, à 11: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, à 11:42)
Hors ligne
#25 Le 19/03/2018, à 11:34
- GuillaumeBTS
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
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