Ответ 1
Просто сделайте простое, если это так:
if grep -q $address /etc/passwd
then
echo "OK";
else
echo "NOT OK";
fi
Опция -q используется здесь только для того, чтобы отключить grep (не выводить...)
Поэтому мне нужно проверить, находится ли имя пользователя получателя в /etc/passwd, которое содержит всех пользователей в моем классе, но я пробовал несколько разных комбинаций операторов if и grep без успеха. Лучшее, что я мог придумать, ниже, но я не думаю, что он работает нормально. Моя логика заключается в том, что если grep имеет значение null, пользователь недействителен.
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
}
Просто сделайте простое, если это так:
if grep -q $address /etc/passwd
then
echo "OK";
else
echo "NOT OK";
fi
Опция -q используется здесь только для того, чтобы отключить grep (не выводить...)
Используйте getent и проверьте код выхода grep. Избегайте использования /etc/passwd. Эквивалент в оболочке:
> getent passwd | grep -q valid_user
> echo $?
0
> getent passwd | grep -q invalid_user
> echo $?
1
Проверка -z предназначена для переменных строк, которые ваш grep не дает. Чтобы дать значение из вашей команды grep, заключите его в $():
if [ -z $(grep $address /etc/passwd) ]
Ваша часть кода
if [ -z grep $address /etc/passwd ]
Вы не сохранили результаты grep $address /etc/passwd
в переменной. перед тем, как поместить его в оператор if, а затем проверить переменную, чтобы увидеть, пуст ли он.
Вы можете попробовать это как
check_address=`grep $address /etc/passwd`
if [ -z "$check_address" ]
then
validuser=0
else
validuser=1
fi
проще всего будет это
$ cat test123
12345678
$ cat test123 | grep 123 >/dev/null && echo "grep result exist" || echo "grep result does not exist"
grep result exist
$ cat test123 | grep 999 >/dev/null && echo "grep result exist" || echo "grep result does not exist"
grep result does not exist