#1 Le 22/11/2015, à 12:28
- mecanotox
[Résolu] Récupération d'une chaine de caractère dans /etc/passwd
Bonjour à tous.
Pour les besoin d'un scripte, il faudrait que je récupère une chaine de caractère en particulier dans le fichier /etc/passwd :
utilisateur:x:10200:10002:adresse@email.dot,,,:/home/utilisateur:/bin/bash
J'aimerais récupérer les chaine de caractère "utilisateur" et "adresse@email.dot" dans 2 variables.
Il semblerait que ce soit possible avec cat, awk, sort, mais je ne comprends pas du tout le man.
Est-ce que quelqu'un aurait une idée ?
Merci d'avance.
Dernière modification par mecanotox (Le 22/11/2015, à 15:53)
Hors ligne
#2 Le 22/11/2015, à 13:08
- credenhill
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
hello
$ read nom email < <(awk -F "[:,]" '/^utilisateur/ {print $1, $5}' /etc/passwd); echo $nom $email
utilisateur adresse@email.dot
ou
$ IFS=":," read nom x x x email x < <(grep '^utilisateur' /etc/passwd ); echo $nom $email
utilisateur adresse@email.dot
Dernière modification par credenhill (Le 22/11/2015, à 13:17)
Hors ligne
#3 Le 22/11/2015, à 14:01
- MicP
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
michel@debG53SW:~$ lignePasswd="utilisateur:x:10200:10002:adresse@email.dot,,,:/home/utilisateur:/bin/bash"
michel@debG53SW:~$ [[ "${lignePasswd}" =~ (.*):.*:.*:.*:(.*):.*:.* ]]
michel@debG53SW:~$ echo ${BASH_REMATCH[1]}
utilisateur
michel@debG53SW:~$ echo ${BASH_REMATCH[2]%%,*}
adresse@email.dot
michel@debG53SW:~$
Hors ligne
#4 Le 22/11/2015, à 14:15
- mecanotox
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
hello.
Merci de ce retour d'information, je vais voir de suite comment l'adapter à mon cas.
Je reviendrais sur le topic lorsque j'aurais terminé le scripte pour mettre le code.
Merci de vos retour.
Hors ligne
#5 Le 22/11/2015, à 15:44
- mecanotox
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
J'ai réussi à l'intégrer par rapport à mon besoin.
J'ai utilisé la solution de credenhill.
L'autre fonctionne également.
Merci à la communauté.
Ci dessous, voici le bout de code :
#!/bin/bash
echo "Saisir user"
read usr
echo ""
usrmail=$(read usrmail < <(awk -F "[:,]" '/^'$usr'/ {print $5}' /etc/passwd);echo $usrmail)
echo $usrmail
Dernière modification par mecanotox (Le 22/11/2015, à 15:53)
Hors ligne
#6 Le 22/11/2015, à 16:10
- MicP
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
#!/bin/bash
read -p "Saisir user : " usr
read usrmail < <(awk -F "[:,]" '/^'"$usr"'/ {print $5}' /etc/passwd)
echo $usrmail
=======
Pour infos, tu fais :
man bash
et dans la page man de bash, tu entre un caractère / suivit de 4 espaces puis du mot read suivit d'un espace et appuie sur la touche entrée.
Hors ligne
#7 Le 22/11/2015, à 16:20
- mecanotox
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
Merci de ton retour. Effectivement il y avait des éléments en trop.
J'ai corrigé du coup de mon côté
Voci le code final :
#!/bin/bash
read -p "Saisir user : " usr
read usrmail < <(awk -F "[:,]" '/^'"$usr"'/ {print $5}' /etc/passwd)
echo $usrmail
Dernière modification par mecanotox (Le 22/11/2015, à 16:20)
Hors ligne
#8 Le 22/11/2015, à 16:28
- credenhill
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
pour une seule variable, pas besoin du read
usrmail=$(awk -F "[:,]" '/^'"$usr"'/ {print $5}' /etc/passwd)
Hors ligne
#9 Le 22/11/2015, à 17:43
- MicP
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
Tant qu'à faire :
#!/bin/bash
read -p "Saisir user : " usr
echo $(awk -F "[:,]" '/^'"$usr"'/ {print $5}' /etc/passwd)
Hors ligne
#10 Le 23/11/2015, à 11:27
- credenhill
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
ou
awk -F "[:,]" 'BEGIN {printf "saisir user : "; getline usr < "-"} $1 ~ "^"usr {print $5}' /etc/passwd
Hors ligne
#11 Le 23/11/2015, à 12:54
- MicP
Re : [Résolu] Récupération d'une chaine de caractère dans /etc/passwd
Ben voilà : Je ne pense pas qu'il soit possible de faire plus court
=======
Il reste que le champ que tu utilise pour récupérer l'adresse mail est nommé Full name => C'est dans ce champ que l'on indique le nom complet de l'utilisateur.
C'était le champ utilisé par la commande finger, mais comme cette commande n'est pratiquement plus utilisée, le contenu de ce champ dépends donc du choix de l'utilisateur.
Ce champ a aussi été renommé GECOS field (General Electric Comprehensive Operating System) et est divisé en sous-champs séparés par une virgule.
Il contient toujours le nom complet de l'utilisateur mais en plus son adresse, son numéro de téléphone, ou/et d'autres informations comme par exemple, un nom d'entreprise, un rôle dans l'entreprise, etc.
Alors pourquoi pas une adresse mail.
Hors ligne