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

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.

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=“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. :slightly_smiling:

[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.

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

[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.

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 ?

[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 : :slightly_smiling:

[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 : :slightly_smiling:[/quote]

Nickel,
ça marche, merci pour ton aide :smt006

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=“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.

  • 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