Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2660 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

script shell bash

n°1224512
arnaud9742
Posté le 22-06-2010 à 22:05:09  profilanswer
 

Bonjour à tous!
 
  Voilà je suis en train de déployer une serveur ldap(openldap et samba en PDC) qui fonctionne à merveille. Cependant, j'aimerai automatisé l'ajout d'utilisateur. En fait je veux faire un script que aille chercher les infos (nom, prénom, groupe et login) dans un fichier texte et grâce à une boucle qui remplisse la base ldap. Je sais que l'on peut exécuter une commande (avec des variables) à l'intérieur d'un script mais je suis perdu pour le reste
 
  Voici mon fichier texte et les variable associées:  
 
$prenom:*$nom:$login:$groupe
arnaud:damour:adamour:789
benoit:vallet:bvallet:542
alexandre:rendour:arendour:456
toto:tutu:ttutu:254
 
  Voici la commande qui sera à exécuter dans le script une fois les infos récupérées dans les variables:  
 
Exemple:smbldap-useradd -a -m -P -A 1 -g 788 -N Gaetan -S Rabier g.rabier
 
commande avec variable: smbldap-useradd -a -m -P -A 1 -g $groupe -N $prenom -S $nom $login
 
 Quelqu'un pourrait-il m'aider?  
 
Merci beaucoup  
 
Arnaud

mood
Publicité
Posté le 22-06-2010 à 22:05:09  profilanswer
 

n°1224513
Je@nb
Kindly give dime
Posté le 22-06-2010 à 23:30:03  profilanswer
 

Ce sujet a été déplacé de la catégorie Systèmes & Réseaux Pro vers la categorie OS Alternatifs par Je@nb

n°1224519
zecrazytux
Posté le 23-06-2010 à 00:28:52  profilanswer
 

lis un peu de doc sur le scripting shell, les redirections de flux et cut
 
c'est d'un simple :)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1224684
fighting_f​alcon
Posté le 23-06-2010 à 15:02:39  profilanswer
 

zecrazytux a écrit :

redirections de flux


ça je suis d'accord
 


ça, pas d'accord ==> IFS  :D  

n°1224686
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 23-06-2010 à 15:18:06  profilanswer
 

fighting_falcon a écrit :


ça je suis d'accord
 


 

fighting_falcon a écrit :


ça, pas d'accord ==> IFS  :D  


 
on ne bidouille pas l'IFS :fou:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1224687
wedgeant
Da penguin inside
Posté le 23-06-2010 à 15:20:19  profilanswer
 

fighting_falcon a écrit :

ça, pas d'accord ==> IFS  :D


ouais enfin foutre la grouille dans l'IFS pour un p'tit script à la con, il vaut p'tet mieux perdre 3 minutes et ajouter un cut plutôt que de mettre sa machine en vrac après :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1224688
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 23-06-2010 à 15:35:08  profilanswer
 

wedgeant a écrit :


ouais enfin foutre la grouille dans l'IFS pour un p'tit script à la con, il vaut p'tet mieux perdre 3 minutes et ajouter un cut plutôt que de mettre sa machine en vrac après :o


l'IFS se repositionne à la fin du script hein :o juste que c'est porcho comme méthode :D


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1224703
bardiel
Debian powa !
Posté le 23-06-2010 à 17:17:57  profilanswer
 

Plutôt que de tergiverser 25 ans sur comment faire, autant pondre directement le script demandé non ? (même si un apprentissage du shell est toujours instructif) :
 

Spoiler :

#!/bin/bash
monfich=plop.txt
 
sed -n '/08$/p' $monfich | while true
do
read ligne
if [ "$ligne" = "" ]
then break
fi
prenom=$(echo ${ligne} | awk -F ":" '{ print $1 }')
nom=$(echo ${ligne} | awk -F ":" '{ print $2 }')
login=$(echo ${ligne} | awk -F ":" '{ print $3 }')
groupe=$(echo ${ligne} | awk -F ":" '{ print $4 }')
smbldap-useradd -a -m -P -A 1 -g $groupe -N $prenom -S $nom $login
done


 
C'est grossier, pas propre, pas fait pour traiter des dizaines de milliers de lignes, mais paf ça marche et ça fait ce que l'on demande :o


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
n°1224705
fighting_f​alcon
Posté le 23-06-2010 à 18:46:13  profilanswer
 

black_lord a écrit :

on ne bidouille pas l'IFS :fou:

 

tu peux argumenter stp (suis curieux !!)

 


sinon, ma version de la chose :

Citation :


#!/bin/bash

 

file=toto.txt

 

while IFS=: read prenom nom login groupe
do
  smbldap-useradd -a -m -P -A 1 -g $groupe -N $prenom -S $nom $login
done < <(cat $file)

 

du coup, l'IFS n'est modifié que pendant l'exécution de la boucle ...

Message cité 1 fois
Message édité par fighting_falcon le 23-06-2010 à 18:47:44
n°1224741
zecrazytux
Posté le 23-06-2010 à 22:41:30  profilanswer
 

fighting_falcon a écrit :


 
tu peux argumenter stp (suis curieux !!)
 
 
sinon, ma version de la chose :

Citation :


#!/bin/bash
 
file=toto.txt
 
while IFS=: read prenom nom login groupe  
do
  smbldap-useradd -a -m -P -A 1 -g $groupe -N $prenom -S $nom $login  
done < <(cat $file)


 
du coup, l'IFS n'est modifié que pendant l'exécution de la boucle ...


 
useless use of cat + bashisme spotted


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
mood
Publicité
Posté le 23-06-2010 à 22:41:30  profilanswer
 

n°1224859
twocats
Posté le 24-06-2010 à 13:59:16  profilanswer
 

D'accord pour le cat, par contre je comprends pas le "bashisme" (en général, pas forcément sur cet exemple). Je m'explique, si quelqu'un écrit un script en Python, je vais pas lui reprocher de "pythoner", il utilise les possibilités de son langage et ne se restreint pas pour rester compatible avec une version de Python d'y il a cinq ou dix ans ! Par contre quand tu scripts en bash il semble de bon ton de se limiter a une syntaxe sh (sinon c'est pas pÔrtable ma bonne dame). Si je script en Bash j'utilise toutes les possibilités du langage et si je dois faire du compatible sh et bien je fais pas un script bash mais un script sh, that's all.
 
P.S. : Je n'ai rien contre le Python, que je ne connais pas, n'y contre les pythoneurs. Je les aimes, avec de la mayonnaise surtout  :D !


---------------
La réponse est 42
n°1224870
zecrazytux
Posté le 24-06-2010 à 14:34:35  profilanswer
 

twocats a écrit :

D'accord pour le cat, par contre je comprends pas le "bashisme" (en général, pas forcément sur cet exemple). Je m'explique, si quelqu'un écrit un script en Python, je vais pas lui reprocher de "pythoner", il utilise les possibilités de son langage et ne se restreint pas pour rester compatible avec une version de Python d'y il a cinq ou dix ans ! Par contre quand tu scripts en bash il semble de bon ton de se limiter a une syntaxe sh (sinon c'est pas pÔrtable ma bonne dame). Si je script en Bash j'utilise toutes les possibilités du langage et si je dois faire du compatible sh et bien je fais pas un script bash mais un script sh, that's all.
 
P.S. : Je n'ai rien contre le Python, que je ne connais pas, n'y contre les pythoneurs. Je les aimes, avec de la mayonnaise surtout  :D !


Bha ouai spa portable ma bonne dame, surtout que t'as moyen d'écrire < <(cmd)  comme ça:  
 
<< EOF
$(cmd)
EOF
 
donc autant faire un truc qui passe partout que de faire du bash-only


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1224956
fighting_f​alcon
Posté le 24-06-2010 à 20:32:47  profilanswer
 

zecrazytux a écrit :

useless use of cat + bashisme spotted


ok, j'avoue ...  :p  
m'enfin j'ai pondu ça à l'arrache, de mémoire ... c'pô perfect quoi
 
 

twocats a écrit :

... par contre je comprends pas le "bashisme" ...


Le soucis, c'est que quand tu mets "#!/usr/bin/python" c'est vraiment l'interpréteur python qui est appelé ...
Alors que "#!/bin/bash", sur Debian maintenant c'est Dash par défaut, sur Ubuntu je ne sais plus, sur d'autres distrib ça va être je ne sais quel "C-Sh" ...
Et en plus, l'utilisateur est libre de choisir son shell préféré ... ce qui, a priori, va modifier le lien /bin/bash (oui parce que c'est bien un lien, vers un système d'alternatives généralement), pour des raisons de simplicité / unicité, vers un shell qui ne saura pas forcément décoder des trucs bien bash

n°1224972
twocats
Posté le 24-06-2010 à 23:04:33  profilanswer
 

Euh, c'est /bin/sh qui est un lien vers n'importe quoi ce me semble  :heink: . Sinon pour le coup ça deviens ingérable de faire un script Bash.
D'ailleurs sur ma petite Mandriva (qui soit-dit en passant est super stable depuis que la nouvelle version est en retard  :D ) /bin/bash est un exécutable et /bin/sh un lien (vers /bin/bash d'ailleurs).


---------------
La réponse est 42
n°1225009
art_dupond
je suis neuneu... oui oui !!
Posté le 25-06-2010 à 10:10:27  profilanswer
 

yop,

 


ça veut dire quoi

 

< <(cat $file)

:??:

 

(je ne comprend pas le '<' dans '<(..)')

 


Marchi :)

 
Spoiler :

j'aurais mis

 


while
do
   ...
done < $file


Message édité par art_dupond le 25-06-2010 à 10:11:40

---------------
oui oui

Aller à :
Ajouter une réponse
 

Sujets relatifs
TWM script f.restart[RESOLU] Kickstart, Post installation script
[BASH] - Formater la sortie avec echo ou printf ? (RESOLU)script shell pour suppression anciennes sauvegardes
Lancer script après reveil d'hibernateDébuter programmation shell
[Résolu] Exécuter un script après mise à jour de certains paquets 
Plus de sujets relatifs à : script shell bash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR