web-dev-qa-db-ja.com

grepに出力がないかどうかを確認する方法は?

したがって、受信者のユーザー名がクラス内のすべてのユーザーを含む/ etc/passwdにあるかどうかを確認する必要がありますが、ifステートメントとgrepのいくつかの異なる組み合わせを試しましたが、成功しませんでした。私が思いつくことができる最高のものは以下ですが、私はそれが適切に機能しているとは思わない。その背後にある私のロジックは、grepがヌルの場合、ユーザーは無効であるということです。

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 
}
23
Duncan

このような場合は簡単に実行してください:

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

ここで-qオプションは、grep quiet(出力しないでください...)

43
Marcellus

Getentを使用して、grepの終了コードを確認します。/etc/passwdの使用は避けてください。シェルで同等:

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

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

あなたのコード

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
3
repzero

-zチェックは、grepが与えていない変数文字列用です。 grepコマンドから値を指定するには、$()で囲みます。

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

最も簡単なものはこれになります

$ 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

0
antigenius