Comparaison entre paragraphes

Résolu/Fermé
alami123 - 26 sept. 2013 à 00:45
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 27 sept. 2013 à 20:19
Salut,

Débutante en Shell, j'aimerais bien votre aide.

Je dois faire un script qui va parcourir un fichier de configuration et voir si mes paramètres sont corrects en se basant sur un ensemble de paramètre.

ex :
pour mon fichier de configuration dns named.conf
le script doit aller lire la configuration de la zone "home4" et confirmer qu'elle est correcte en faisant la comparaison avec la directive suivante :

#configuration home4 :
zone "home4.fr" {
type master;
file "/etc/bind/zones/db.home3.fr";
allow-transfer {213.186.3.120;};
};

avez- vous une idée sur la commande que je peux utiliser pour cette comparaison ?

merci par avance pour votre aide

5 réponses

mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
26 sept. 2013 à 23:40
Le plus simple c'est d'écrire un script awk ou chaque ligne correspond à un "état" d'une machine à état.
https://fr.wikipedia.org/wiki/Automate_fini

Petite illustration si tu ne sais pas ce que c'est. Supposons que tu cherches un paragraphe qui fait 3 lignes. La première correspond à l'état 1, la seconde à l'état 2, la troisième à l'état 3. Au début du script tu pars à l'état 0 (tu peux mémoriser l'état courant dans une variable globale à ton script).

Si tu trouves une ligne qui correspond à la ligne 1 et si tu es à l'état 0, tu passes à l'état 1.
Sinon si tu trouves une ligne qui correspond à la ligne 2 et si tu es à l'état 1, tu passes à l'état 2.
Sinon si tu trouves une ligne qui correspond à la ligne 3 et si tu es à l'état 2, tu passes à l'état 3, alors tu as trouvé le paragraphe recherché.
Dans tous les autres cas tu retombes à l'état 0.

Ça doit ressembler à un truc comme ça :

BEGIN {
ok = 0;
state = 0;
}

/ligne1/ && (state == 0) { state = 1; }
/ligne2/ && (state == 1) { state = 2; }
/ligne3/ && (state == 2) { ok = 1; }
{ state = 0; }

END {
if (ok == 1) {
print "OK"
} else {
print "NOK"
}
}

Ou sinon tu peux installer pcregrep comme suggéré ici :
https://stackoverflow.com/questions/14350856/can-awk-patterns-match-multiple-lines

Bonne chance
1
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
26 sept. 2013 à 01:32
En ce qui me concerne, je n'ai pas compris la question. Mais à tout hasard, il existe des outils pour faire des vérifications sur des zones DNS :
https://www.cyberciti.biz/tips/howto-linux-unix-check-dns-file-errors.html

Quelques exemple d'utilisation ici aussi :
http://doc.ubuntu-fr.org/bind9#configuration_serveur_maitre

Bonne chance
0
je me suis peut être mal exprimé.
je cherche à parser mon fichier de configuration et comparer avec la chaine ci-dessous.

comment je peux faire ça avec un awk ?

NB : ce n'est qu'un exemple, je dois faire la mm chose sur d'autres serveurs, apache, tomcat, et postfix...
0
Merci mamiemando pour la réponse

c'est très utile : )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
27 sept. 2013 à 20:19
Je t'en prie :) Est-ce que ton problème est résolu ?

Si oui, tu peux le basculer en tant que tel à l'aide du lien "marquer comme résolu" au niveau de ton premier message.

Bonne soirée !
0