script shell bash

script shell bash - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 22-06-2010 à 22:05:09    

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

Reply

Marsh Posté le 22-06-2010 à 22:05:09   

Reply

Marsh Posté le 22-06-2010 à 23:30:03    

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

Reply

Marsh Posté le 23-06-2010 à 00:28:52    

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
Reply

Marsh Posté le 23-06-2010 à 15:02:39    

zecrazytux a écrit :

redirections de flux


ça je suis d'accord
 


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

Reply

Marsh Posté le 23-06-2010 à 15:18:06    

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
Reply

Marsh Posté le 23-06-2010 à 15:20:19    

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
Reply

Marsh Posté le 23-06-2010 à 15:35:08    

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
Reply

Marsh Posté le 23-06-2010 à 17:17:57    

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
Reply

Marsh Posté le 23-06-2010 à 18:46:13    

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
Reply

Marsh Posté le 23-06-2010 à 22:41:30    

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
Reply

Marsh Posté le 23-06-2010 à 22:41:30   

Reply

Marsh Posté le 24-06-2010 à 13:59:16    

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
Reply

Marsh Posté le 24-06-2010 à 14:34:35    

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
Reply

Marsh Posté le 24-06-2010 à 20:32:47    

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

Reply

Marsh Posté le 24-06-2010 à 23:04:33    

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
Reply

Marsh Posté le 25-06-2010 à 10:10:27    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed