[gull] truc et astuce: Récupérer le nom complet d'un utilisateur

Félix Hauri felix at f-hauri.ch
Mon Jun 23 15:29:08 CEST 2003


Cela faisait longtemps que je n'avais pas ``joué'' avec mon shell (bash)

Le but est de récupérer le nom complet de l'utilisateur ($USER) qui se
trouve confiné au début du cinquième champs dans /etc/passwd:

$ UNAME=$(grep ^$USER: /etc/passwd |cut -d: -f 5|cut -d, -f1)
$ echo $UNAME
( simple et efficace ;)

mais aussi:
$ UNAME=(awk -F: /$USER/' {print $5}'</etc/passwd|sed -e s/,.*$//)
$ echo $UNAME
( bof ;)

voire:
$ UNAME=$(sed </etc/passwd \
           -e "s/^\(${USER}:[^:]*:[0-9]*:[0-9]*:\([^,]*\),.*\|^.*\)$/\2/")
$ echo $UNAME
( sans commentaires ;)

ou encore:
$ UNAME=$(perl -pe /^$USER':[^:]:\d+:\d+:([^,]*),/ && do {
	print $1 ; exit 0;};undef $_' </etc/passwd)
$ echo $UNAME
( J'aime bien, en perl, l'idée du masque permettant de mettre en évidence
  ce que l'on cherche. ;)

ou alors, sans quitter bash:
$ UNAME=$(IFS=',:'; while read l;do set -- $l;
	[ "$1" == "$USER" ] && echo $5 && exit 0
	done </etc/passwd;)
$ echo $UNAME
( J'aime bien la possibilité de récupérer les champs avec $1, $2, $3...
  en l'occurence ``$1 == $USER'' ne laisse pas d'ambiguité ;)

--
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch





More information about the gull mailing list