# \[Résolu\] Récupérer une chaîne pour traitement

**URL:** <https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289 "2016-02-20T16:39:26Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![dexmon](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/d2c977/32.png) [@dexmon](https://www.debian-fr.org/u/dexmon)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/1 "2016-02-20T16:39:26Z")

</div>

Salut,  
voilà j’essaie vainement de créer un simple script bash qui vérifie si le nom de l’utilisateur existe dans le fichier /etc/passwd si oui alors il continue à lancer le script et sinon il s’arrête mais je n’y arrive pas.

[code]#!/bin/sh

# 

echo -n "Nom de votre utilisateur? : "  
read USER

VERIF=`grep $USER /etc/passwd | cut -d: -f1`  
if [! -e “$VERIF”]; then  
echo "L’utilisateur $USER n’existe pas, vous devez d’abord le créer!!"  
else [-e “$VERIF”];  
echo “L’utilisateur $USER existe bien…lancement du script…”  
[…][/code]

Voilà, si quelqu’un a une idée…car je ne sais pas si c’est bien la commande qu’il faut pour tester si la valeur est vrai ou fausse.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/2 "2016-02-20T16:39:27Z")

</div>

Moi j’aurais tendance à faire :

[code]#!/bin/sh

echo -n "Nom de votre utilisateur? : "  
read USER

grep $USER /etc/passwd \> /dev/null

if [$? -ne 0]; then  
echo "L’utilisateur $USER n’existe pas, vous devez d’abord le créer!!"  
exit 1  
else  
echo "L’utilisateur $USER existe bien…lancement du script…"  
fi[/code]

---

<div class="post-metadata">

**Author:** ![dexmon](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/d2c977/32.png) [@dexmon](https://www.debian-fr.org/u/dexmon)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/3 "2016-02-20T16:39:27Z")

</div>

[quote=“MisterFreez”]Moi j’aurais tendance à faire :

[code]#!/bin/sh

echo -n "Nom de votre utilisateur? : "  
read USER

grep $USER /etc/passwd \> /dev/null

if [$? -ne 0]; then  
echo "L’utilisateur $USER n’existe pas, vous devez d’abord le créer!!"  
exit 1  
else  
echo "L’utilisateur $USER existe bien…lancement du script…"  
fi[/code][/quote]

Salut misterFreez,  
pourquoi le \> /dev/null ?  
et que veut dire ceci [$? -ne 0] ?

Voici ce que j’ai fait et ça à l’air de marcher:

[code]#!/bin/sh

echo -n "Nom d’utilisateur ? : "  
read USER

### vérifier si l’utilisateur existe déjà

VERIF=`grep $USER /etc/passwd | cut -d: -f1`  
if [[“$VERIF”]]; then  
echo "L’utilisateur $USER existe déjà"  
exit 1  
else  
echo "L’utilisateur $USER n’existe pas…lancement du script…"  
fi[/code]

J’aimerais avoir un avis. 🙂

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/4 "2016-02-20T16:39:28Z")

</div>

[quote=“dexmon”]Salut misterFreez,  
pourquoi le \> /dev/null ?  
et que veut dire ceci [$? -ne 0] ?[/quote]  
J’exécute le grep donc s’il trouve l’utilisateur il va afficher la ligne du passwd en question. Ce qui n’est pas forcément souhaitable ne serais-ce que d’un point de vu esthétique.  
$? contient à tout moment la valeur de retour renvoyé par la dernière commande exécutée. Si grep trouve l’utilisateur il renvoie 0, si non il renvoie 1.

> [@](#):
>
> `[["$VERIF"]]`

Je ne connais pas ce type de condition, je sais pas si c’est bien ou pas.

---

<div class="post-metadata">

**Author:** ![dexmon](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/d2c977/32.png) [@dexmon](https://www.debian-fr.org/u/dexmon)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/5 "2016-02-20T16:39:39Z")

</div>

[quote=“MisterFreez”][quote=“dexmon”]Salut misterFreez,  
pourquoi le \> /dev/null ?  
et que veut dire ceci [$? -ne 0] ?[/quote]  
J’exécute le grep donc s’il trouve l’utilisateur il va afficher la ligne du passwd en question. Ce qui n’est pas forcément souhaitable ne serais-ce que d’un point de vu esthétique.  
$? contient à tout moment la valeur de retour renvoyé par la dernière commande exécutée. Si grep trouve l’utilisateur il renvoie 0, si non il renvoie 1.

> [@](#):
>
> `[["$VERIF"]]`

Je ne connais pas ce type de condition, je sais pas si c’est bien ou pas.[/quote]

ta commande fonctionne bien mais le problème c’est que supposons que mon utilisateur jonydepp existe et que je tappe jony il me dit qu’il existe alors que c’est faux.  
Comment résoudre ce problème ?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/6 "2016-02-20T16:39:46Z")

</div>

[code]#!/bin/sh

echo -n "Nom de votre utilisateur? : "  
read USER

grep “^$USER:” /etc/passwd \> /dev/null

if [$? -ne 0]; then  
echo "L’utilisateur $USER n’existe pas, vous devez d’abord le créer!!"  
exit 1  
else  
echo "L’utilisateur $USER existe bien…lancement du script…"  
fi[/code]  
On indique que $USER doit se trouver en tout début de ligne et être immédiatement précédé de : 🙂

---

<div class="post-metadata">

**Author:** ![dexmon](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/d2c977/32.png) [@dexmon](https://www.debian-fr.org/u/dexmon)\
**Post date:** [Février 20, 2016, 4:39 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/7 "2016-02-20T16:39:47Z")

</div>

[quote=“MisterFreez”][code]#!/bin/sh

echo -n "Nom de votre utilisateur? : "  
read USER

grep “^$USER:” /etc/passwd \> /dev/null

if [$? -ne 0]; then  
echo “L’utilisateur $USER n’existe pas, vous devez d’abord le créer!!”  
exit 1  
else  
echo “L’utilisateur $USER existe bien…lancement du script…”  
fi[/code]  
On indique que $USER doit se trouver en tout début de ligne et être immédiatement précédé de : 🙂[/quote]

Nickel,  
ça marche, merci pour ton aide ![:smt006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif)

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 4:40 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/8 "2016-02-20T16:40:30Z")

</div>

Comme je te l’ai dit sur la DUF, l’option -q de grep t’évite la redirection \> /dev/null:

if grep -q “^$USER:” /etc/passwd ; then

---

<div class="post-metadata">

**Author:** ![dexmon](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/d2c977/32.png) [@dexmon](https://www.debian-fr.org/u/dexmon)\
**Post date:** [Février 20, 2016, 4:40 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/9 "2016-02-20T16:40:39Z")

</div>

[quote=“fran.b”]Comme je te l’ai dit sur la DUF, l’option -q de grep t’évite la redirection \> /dev/null:

if grep -q “^$USER:” /etc/passwd ; then[/quote]

Merci fran,  
je n’y avais pas penser.

Tant que je vous ai sous la main tout les deux, a quoi servent les commandes ‘fi’ , ‘exit 1’ et ‘clear’ ?  
car dans le man il n’y a pas grand chose pour ‘fi’.  
Je retrouve souvent ces commandes dans les script bash.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 4:40 UTC](https://www.debian-fr.org/t/resolu-recuperer-une-chaine-pour-traitement/10289/10 "2016-02-20T16:40:39Z")

</div>

- fi: fin du ifthenelse

if test ; then  
\<bloc d’instructions\>  
else  
\<bloc d’instructions\>  
fi

- exit n:  
Sortie avec code de retour égal à n (en général 0 = OK, 1 ou + = erreur)

- clear: efface l’écran
