Demande d'aide sur script shell

Résolu/Fermé
Namtar - 12 sept. 2007 à 10:47
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 12 sept. 2007 à 20:31
Bonjour à tous,
voila en faite je viens vers vous (Hô grand connaisseurs du shell) car étant encore débutant dans ce domaine, je me retrouve bloqué.

je dois créer un script pour mon équipe comprenant un menu permettant de modifier un fichier .xml, c'est à dire qu'il faut en gros que je puisse rajouter des balise xml a certain endroit du fichier.

le menu est créer car c'est bien sur le plus simple... mais là ou je bloque c'est pour agrémenter le fichier .xml au bons endroit. Comme je vous l'ai dit, je suis débutant dans le shell et je connais pas toutes les commandes ni toutes le facon de "scripter" comme le awk ou le perl.

voila en gros comment est le fichier

<LDAPConfig>
<ProcessFilter>DeploymentManager,*,*</ProcessFilter>
<Host>directory.echonet</Host>
<Port>xxx</Port>
<MinConnections>1</MinConnections>
<MaxConnections>5</MaxConnections>
</LDAPConfig>

	<SecurityUsers>

	<User id="1">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>

	<User id="2">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>

</SecurityUsers>

	<SecurityGroups>

	<AdministratorsGroup>
<Member>299466</Member>
<Member>328678</Member>
<Member>359500</Member>
</AdministratorsGroup>

...


je dois donc rajouter les balise
<User id="n+1">
<Name>n° ID de mon user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
juste avant la fin de la balise </SecurityUsers>. Les ID, Prénoms et Nom seront rajouter grace a des variables... mais comment insérer tout ca au bon endroit dans le fichier ??
j'ai bien sur tenter le cat >> ... mais l'insertion ne se fait pas au bon endroit.

j'espère que quelqu'un ici pourra m'aider car mon équipe et moi même sommes vraiment bloqué sur ce point à l'heure actuelle.
Merci d'avance.

Namtar
A voir également:

6 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 sept. 2007 à 13:12
Salut,

je ne suis pas sur d'avoir compris t'as question, voici une solution en perl avec ce que j'ai compris ;-)
root@debian:~# cat namtar
<LDAPConfig>
<ProcessFilter>DeploymentManager,*,*</ProcessFilter>
<Host>directory.echonet</Host>
<Port>xxx</Port>
<MinConnections>1</MinConnections>
<MaxConnections>5</MaxConnections>
</LDAPConfig>

<SecurityUsers>
<User id="1">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="2">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
</SecurityUsers>

<SecurityGroups>

<AdministratorsGroup>
<Member>299466</Member>
<Member>328678</Member>
<Member>359500</Member>
</AdministratorsGroup>

root@debian:~# perl -pi.orig -e 's#^#print "<User id=" .$_ . ">\n<Name>ID user</Name>\n<DisplayName>Prénom + Nom du user</DisplayName>\n</User>\n" for (3..5)#e if /(?=\<\/SecurityUsers\>)/' namtar
root@debian:~# cat namtar
<LDAPConfig>
<ProcessFilter>DeploymentManager,*,*</ProcessFilter>
<Host>directory.echonet</Host>
<Port>xxx</Port>
<MinConnections>1</MinConnections>
<MaxConnections>5</MaxConnections>
</LDAPConfig>

<SecurityUsers>
<User id="1">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="2">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id=3>
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id=4>
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id=5>
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
</SecurityUsers>

<SecurityGroups>

<AdministratorsGroup>
<Member>299466</Member>
<Member>328678</Member>
<Member>359500</Member>
</AdministratorsGroup>

0
Mais alors toi t'es génial ;o)
je viens de tester et l'incrémentation du fichier se faite parfaitement au bon endroit. Encore merci ;o)

Le seul petit truc qu'il faut que je trouve c'est comment faire en sorte que la balise <User id="2"> se mette automatiquement en N+1 a chaque insertion. Car j'ai vu que dans ta formule, tu défini toi même les nombre des balises ID grâce a ca : for (3..5) .

c'est à dire (histoire qu'on me comprenne un mieux)
si la derniere balise est <User id="2">, lors de ma prochaine insertion, cette balise doit passer à 3, puis le jours ou je dois encore rajouter un user, elle doit passer à 4 et ainsi de suite.

Je sais que je suis chiant avec toutes mes questions de débutant mais j'avoue ne pas du tout connaitre le Perl et l'awk (ouai je sais c'est inadmissible mais je ne suis dans le monde unix que depuis 3 mois)

en tout cas merci encore pour ton aide qui va déjà beaucoup m'avancer ;o)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 sept. 2007 à 14:22
c'est ça que tu veux?
root@debian:~# cat namtar
<LDAPConfig>
<ProcessFilter>DeploymentManager,*,*</ProcessFilter>
<Host>directory.echonet</Host>
<Port>xxx</Port>
<MinConnections>1</MinConnections>
<MaxConnections>5</MaxConnections>
</LDAPConfig>

<SecurityUsers>
<User id="1">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="2">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
</SecurityUsers>

<SecurityGroups>

<AdministratorsGroup>
<Member>299466</Member>
<Member>328678</Member>
<Member>359500</Member>
</AdministratorsGroup>

root@debian:~# perl -pi.orig -e '++$i if /<User/;s#^#<User id="${\($i+1)}">\n<Name>ID user</Name>\n<DisplayName>Prénom + Nom du user</DisplayName>\n</User>\n# if /(?=\<\/SecurityUsers\>)/' namtarroot@debian:~# cat namtar
<LDAPConfig>
<ProcessFilter>DeploymentManager,*,*</ProcessFilter>
<Host>directory.echonet</Host>
<Port>xxx</Port>
<MinConnections>1</MinConnections>
<MaxConnections>5</MaxConnections>
</LDAPConfig>

<SecurityUsers>
<User id="1">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="2">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="3">
<Name>ID user</Name>
<DisplayName>Prenom + Nom du user</DisplayName>
</User>
</SecurityUsers>

<SecurityGroups>

<AdministratorsGroup>
<Member>299466</Member>
<Member>328678</Member>
<Member>359500</Member>
</AdministratorsGroup>

root@debian:~# perl -pi.orig -e '++$i if /<User/;s#^#<User id="${\($i+1)}">\n<Name>ID user</Name>\n<DisplayName>Prénom + Nom du user</DisplayName>\n</User>\n# if /(?=\<\/SecurityUsers\>)/' namtarroot@debian:~# cat namtar
<LDAPConfig>
<ProcessFilter>DeploymentManager,*,*</ProcessFilter>
<Host>directory.echonet</Host>
<Port>xxx</Port>
<MinConnections>1</MinConnections>
<MaxConnections>5</MaxConnections>
</LDAPConfig>

<SecurityUsers>
<User id="1">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="2">
<Name>ID user</Name>
<DisplayName>Prénom + Nom du user</DisplayName>
</User>
<User id="3">
<Name>ID user</Name>
<DisplayName>Prenom + Nom du user</DisplayName>
</User>
<User id="4">
<Name>ID user</Name>
<DisplayName>Prenom + Nom du user</DisplayName>
</User>
</SecurityUsers>

<SecurityGroups>

<AdministratorsGroup>
<Member>299466</Member>
<Member>328678</Member>
<Member>359500</Member>
</AdministratorsGroup>

root@debian:~#
0
HAHUUUUUUUUUUUU merci m'sieur... c'est exactement ce que je voulais ;o)

bon faut vraiment que je mette au Perl

encore merci pour tout, je vais pouvoir finir mon script tranquil now !!
0

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

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 sept. 2007 à 15:27
De rien ;-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 sept. 2007 à 20:31
j'ai oublié de te préciser une chose

l'option i.orig permets la modifications et en même temps la sauvegarde ton fichier (dans notre cas namtar ;-)
donc si tu regardes bien tu verras 2 fichiers
namtar et namtar.orig
comme ça en cas de problèmes tu peux toujours récupérer le dernier fichier original au cas où
0