Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
script sh décomposer nom prénom
Envoyé par: seboost

Bonjour j'essay de faire un petit script pour linux. Je récupére la liste de mes utilisateurs sur le domaine windows (getent passwd). Le retour de cette commande est comme ceci:
pseudo:x:10002:10000:nom prenom:/home/pseudo:/bin/bash
a partir de cette liste je voudrait récupérer le nom et le prénom et les assemblés pour créer une adresse mail.
voici le début de mon script:

#!/bin/sh

# Creation of the mail

MAILLING=/home/mailling.abook
USER=`getent passwd`

for i in $USER; do
wNAME=`echo $i | cut -d : -f 5`

if [ $wUID -gt 9999 ]; then
# Enter the mail
printf "prenom.nom@domain.com," >> $MAILLING
fi
done

Et donc dans le printf je voudrais qu'a partir de wNAME il y a prenom.nom
merci pour votre aide

Poste le Wednesday 4 May 2005 16:03:30
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: cancerus

Bonjour,

tu peux utiliser awk:

fNAME=`echo $wNAME| awk '{print $2}'`
lNAME=`echo $wNAME| awk '{print $1}'`
MONMAIL=`echo $fNAME"."$lNAME`
printf $MONMAIL"@domain.com," >> $MAILLING

A plus.

Poste le Wednesday 4 May 2005 16:42:26
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: Eric92

Citation
cancerus
tu peux utiliser awk:

fNAME=`echo $wNAME| awk '{print $2}'`
lNAME=`echo $wNAME| awk '{print $1}'`
MONMAIL=`echo $fNAME"."$lNAME`
printf $MONMAIL"@domain.com," >> $MAILLING
La ligne 3 serait plus simplement : MONMAIL="$fNAME.$lNAME"
Mais comment est défini wUID ?

Une autre proposition (à tester) :
MAILLING=/home/mailling.abook
# On extrait "nom prenom" pour les UID > 9999
getent passwd |  awk -F: '{if ($3 > 9999) print $5}' >/tmp/users.$$

# On écrit les adresses email
awk '{printf "%s.%s@domain.com,", $2, $1}' </tmp/users.$$ >$MAILLING 

rm /tmp/users.$$
NB : "/tmp/users.$$" permet un fichier temporaire unique ($$ = pid du shell).
Attention : ça ne marchera pas avec les noms composés (LE GRAND)...

Poste le Thursday 5 May 2005 03:41:18
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: Sve@r

Citation
Eric92
cancerus a écrit :tu peux utiliser awk:

fNAME=`echo $wNAME| awk '{print $2}'`
lNAME=`echo $wNAME| awk '{print $1}'`
MONMAIL=`echo $fNAME"."$lNAME`
printf $MONMAIL"@domain.com," >> $MAILLING
La ligne 3 serait plus simplement :
MONMAIL="$fNAME.$lNAME"
Mais comment est défini wUID ?

Une autre proposition (à tester)
:
MAILLING=/home/mailling.abook
# On extrait "nom prenom" pour les UID > 9999
getent passwd | awk -F: '{if ($3 > 9999) print
$5}' >/tmp/users.$$

# On écrit les adresses email
awk '{printf "%s.%s@domain.com,", $2, $1}'
</tmp/users.$$ >$MAILLING

rm /tmp/users.$$
NB : "/tmp/users.$$" permet un fichier temporaire
unique ($$ = pid du shell).
Attention : ça ne marchera pas avec les noms
composés (LE GRAND)...

C'est un très bon réflexe de:
1) utiliser "$$"
2) travailler dans "/tmp"
On peut même utiliser "$0" pour donner au nom du fichier temporaire une racine rappelant du programme utilisé style
fic_tmp="/tmp/`basename $0`.$$"
machin truc >$fic_tmp
autre truc <$fic_tmp
rm -f $fic_tmp

Mais ici, ce n'est pas vraiment la peine d'utiliser un fichier temporaire alors que le pipe sert à ça...

MAILLING=/home/mailling.abook
# On extrait "nom prenom" pour les UID > 9999
# Et on renvoie ça dans l'écriture des email
getent passwd | awk -F: '{if ($3 > 9999) print
$5}' | awk '{printf "%s.%s@domain.com,", $2, $1}' >$MAILLING

@:-)

Poste le Thursday 5 May 2005 11:21:42
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: Eric92

Citation
Sve@r
Mais ici, ce n'est pas vraiment la peine d'utiliser un fichier temporaire alors que le pipe sert à ça...
D'accord, mais ça me paraissait plus lisible qu'une seule longue ligne... ça se discute.

En fait, je voulais surtout montrer que si on utilise awk, pas besoin d'écrire une boucle en shell car awk le fait implicitement.

Ici, s'il y a des milliers d'utilisateurs, ça peut être pénalisant de les parcourir 2 fois
=> autre solution avec 1 awk au lieu de 2 :
getent passwd |  awk -F: '{if ($3 > 9999) {
  split($5,T," ");
  printf "%s.%s@domain.com,", T[2], T[1] }
}'
# Le tableau T contient "nom prenom"

Poste le Friday 6 May 2005 01:52:48
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: Sve@r

Citation
Eric92
En fait, je voulais surtout montrer que si on utilise awk, pas besoin d'écrire une boucle en
shell car awk le fait implicitement.
Vi, c'est son but de traiter les fichiers (ou les flux)

Citation
Eric92
=> autre solution avec 1 awk au lieu de 2
:
getent passwd | awk -F: '{if ($3 > 9999) {
split($5,T," ");
printf "%s.%s@domain.com,", T[2], T[1] }
}'
# Le tableau T contient "nom prenom"

SUPERBE !!! C'est vraiment agréable de mettre en commun nos connaissances respectives pour les approfondir mutuellement @:-)

Poste le Friday 6 May 2005 14:11:04
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: seboost

J'essay a partir d ela solution du tableau de décomposer un peu plus mon script pour qu'il soit compréhensilbe par tous mais j'ai une erreur.
Voici mon code
#!/bin/sh
MAILLING=/tmp/scripts/global.abook

USER=`getent passwd`

for i in $USER; do
wUSER=`echo $i | cut -d : -f 1`
wNAME=`echo $i | cut -d : -f 5`
wUID= `echo $i | cut -d : -f 3`

if [ $wUID -gt 9999 ]; then
# Create the global address book
split ($wNAME,T," ")
wNOM= T[1]
wPRENOM= T[2]
printf "$wUSER|$wPRENOM|$wNOM|$wPRENOM.$wNOM@domain.com\n" >> $MAILLING
fi
done

et voici mon code d'erreur

./test.sh: line 14: syntax error near unexpected token `$wNAME,T," "'
./test.sh: line 14: ` split ($wNAME,T," ")'

merci pour votre aide

Poste le Monday 9 May 2005 10:41:02
Répondre     Citer    
Re: script sh décomposer nom prénom
Envoyé par: Sve@r

C'est quoi cette commande "split" de la ligne 14 ?
C'est quoi ces parenthèses ? Tu te crois en C ???

La fonction "split()" vue dans ce topic est une routine incluse dans le programme "awk", ce n'est pas une commande shell... (en fait, la commande "split" exite mais ne fait pas la même chose) !

Utilise et regarde les scripts présents ici pour comprendre comment ils fonctionnent puis écris-toi ton propre script en sachant ce que tu fais et pas au petit bonheur !!!

Poste le Monday 9 May 2005 22:25:42
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
script sh décomposer nom prénom
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons