【问题标题】:How can I check if 'grep' doesn't have any output?如何检查“grep”是否没有任何输出?
【发布时间】:2015-02-08 03:21:39
【问题描述】:

我需要检查收件人用户名是否在包含我班级所有用户的文件 /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
}

【问题讨论】:

    标签: bash if-statement null grep


    【解决方案1】:

    如果像这样做一个简单的事情:

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

    这里使用 -q 选项只是为了使 grep 安静(不要输出...)

    【讨论】:

    • 如果您不想保留结果,则更简单的解决方案
    • 如何将其与大于 0 的变量值的测试相结合?类似if grep -q $address /etc/passwd &amp;&amp; $val &gt; 0
    • @SumitKumarGhosh -- if grep -q "$address" /etc/passwd &amp;&amp; [ "${val}" -gt 0 ]; then
    • grep -q 在 solaris 中不起作用.. 有什么想法或替代方法吗?
    【解决方案2】:

    使用 getent 并检查 grep 的退出代码。避免使用 /etc/passwd。 shell中的等价物:

    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) ]
      

      【讨论】:

      • 您可以尝试添加双引号吗? if [ -z "$(grep $address /etc/passwd)" ] 编辑:此外,如果您不希望为无效用户运行它们,请将整个 echo 和邮件命令转移到 else 子句中。跨度>
      【解决方案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
        
        # Output: 12345678
        
        cat test123 | grep 123 >/dev/null && echo "grep result exist" || echo "grep result doesn't exist"
        
        # Output: grep result exist
        
        cat test123 | grep 999 >/dev/null && echo "grep result exist" || echo "grep result doesn't exist"
        
        # Output: grep result doesn't exist
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-15
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 2014-10-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多