J'ai donc besoin de vérifier si le nom d'utilisateur du destinataire est dans/etc/passwd qui contient tous les utilisateurs de ma classe, mais j'ai essayé quelques combinaisons différentes d'instructions if et grep sans succès. Le mieux que j'ai pu trouver est ci-dessous, mais je ne pense pas que cela fonctionne correctement. Ma logique derrière cela est que si le grep est nul, l'utilisateur n'est pas valide.
send_email()
{
message=
address=
attachment=
validuser=1
until [ "$validuser" = "0" ]
do
echo "Enter the email address: "
read address
if [ -z grep $address /etc/passwd ]
then
validuser=0
else
validuser=1
fi
echo -n "Enter the subject of the message: "
read message
echo ""
echo "Enter the file you want to attach: "
read attachment
mail -s "$message" "$address"<"$attachment"
done
press_enter
}
Faites simplement un simple si comme ceci:
if grep -q $address /etc/passwd
then
echo "OK";
else
echo "NOT OK";
fi
L'option -q est utilisée ici juste pour faire grep silencieux (ne pas sortir ...)
Utilisez getent et vérifiez le code de sortie de grep. Évitez d'utiliser/etc/passwd. Équivalent dans la coque:
> getent passwd | grep -q valid_user
> echo $?
0
> getent passwd | grep -q invalid_user
> echo $?
1
Votre morceau de code
if [ -z grep $address /etc/passwd ]
Vous n'avez pas enregistré les résultats de grep $address /etc/passwd
dans une variable. avant de le placer dans l'instruction if, puis de tester la variable pour voir si elle est vide.
Vous pouvez l'essayer comme ça
check_address=`grep $address /etc/passwd`
if [ -z "$check_address" ]
then
validuser=0
else
validuser=1
fi
La vérification -z concerne les chaînes variables que votre grep ne donne pas. Pour donner une valeur à partir de votre commande grep, mettez-la entre $ ():
if [ -z $(grep $address /etc/passwd) ]
le plus simple sera celui-ci
$ cat test123
12345678
$ cat test123 | grep 123 >/dev/null && echo "grep result exist" || echo "grep result doesn't exist"
grep result exist
$ cat test123 | grep 999 >/dev/null && echo "grep result exist" || echo "grep result doesn't exist"
grep result doesn't exist