加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

贝壳尾巴| grep -q总是返回true

发布时间:2020-12-15 21:02:06 所属栏目:安全 来源:网络整理
导读:当我执行这段代码时,循环总是在第一次结束(即使最后两行auth.log不包含“exit”),这意味着$c总是得到一些字符串: while true;do c=$(tail -2 /var/log/auth.log | grep -q "exit") if $c ; then echo "true" unset c break fi DONE 你知道为什么c = $(tail
当我执行这段代码时,循环总是在第一次结束(即使最后两行auth.log不包含“exit”),这意味着$c总是得到一些字符串:

while true;
do
    c=$(tail -2 /var/log/auth.log | grep -q "exit")
    if $c ;
    then
            echo "true"
            unset c
            break
    fi

DONE

你知道为什么c = $(tail -2 /var/log/auth.log | grep -q“exit”)总是得到某种字符串吗?我认为这是因为尾巴.

我可以使用-o选项然后比较字符串,但我更喜欢在if条件中使用布尔值.

解决方法

grep -q by design不返回任何输出,只是通过退出代码发出是否找到匹配的信号.

因此,您可以直接使用您的管道作为条件:

while true;
do
    if tail -2 /var/log/auth.log | grep -q "exit";
    then
            echo "true"
            break
    fi
done

至于你试过的:

正如Benjamin W.在对问题的评论中所暗示的那样,执行扩展到空字符串的命令始终被视为成功命令.

注意:命令是否实际为空,因为有问题的变量未设置,或者在本例中,显式分配了一个空(空)字符串,这无关紧要.

因此,假设$c总是为空 – 因为设计中的grep -q永远不会返回stdout输出 – if条件总是求值为true.

要明确:$c,因为它没有在条件中使用(如果$c; …而不是if [“$c”]; …),被解释为执行而不是作为执行的命令用于测试空虚的字符串.

如果在$c中捕获其输出的命令是生成stdout输出,则必须使用条件测试:if [-n“$c”];那么……(或者,更简洁,如果[“$c”];那么……).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读