Подтвердить что ты не робот

Как проверить, не имеет ли 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 
}
4b9b3361

Ответ 1

Просто сделайте простое, если это так:

if grep -q $address  /etc/passwd
then 
   echo "OK";
else
   echo "NOT OK";
fi

Опция -q используется здесь только для того, чтобы отключить grep (не выводить...)

Ответ 2

Используйте getent и проверьте код выхода grep. Избегайте использования /etc/passwd. Эквивалент в оболочке:

> getent passwd | grep -q valid_user
> echo $?
0

> getent passwd | grep -q invalid_user
> echo $?
1

Ответ 3

Проверка -z предназначена для переменных строк, которые ваш grep не дает. Чтобы дать значение из вашей команды grep, заключите его в $():

if [ -z $(grep $address /etc/passwd) ]

Ответ 4

Ваша часть кода

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

Ответ 5

проще всего будет это

$ 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