Linux 无法让我的if在我的shell脚本中工作

Linux 无法让我的if在我的shell脚本中工作,linux,bash,if-statement,tail,Linux,Bash,If Statement,Tail,尽可能地简单 我想让这个脚本捕捉一行,在名为“out.log”的日志文件中说“hello”。。 我遇到的问题是,它总是将“echo expression evaluated as false”作为输出,即使我知道日志文件包含我想要的行 #!/bin/bash SERVICE_HOME="home/username/Desktop/SMX3test" CURRENT_USER=`whoami` start=0 NULLPOINT=out.log OUT=hello LINES=20 if

尽可能地简单

我想让这个脚本捕捉一行,在名为“out.log”的日志文件中说“hello”。。 我遇到的问题是,它总是将“echo expression evaluated as false”作为输出,即使我知道日志文件包含我想要的行

#!/bin/bash

SERVICE_HOME="home/username/Desktop/SMX3test"

CURRENT_USER=`whoami`

start=0

NULLPOINT=out.log
OUT=hello
LINES=20

if [ 'tail -n $LINES $NULLPOINT | grep hello' = "$OUT" ];
        then
            echo expression evaluated as true
        else
            echo expression evaluated as false
        fi
exit $start
有人给小费还是索洛蒂安

/呸

# 我明白了##

# 最终代码:

#!/bin/bash

############################
# Phew's Start/stop script #
############################

SERVICE_HOME="opt/data/log/ls/smx3/"

CURRENT_USER=`whoami`


start=0

NULLPOINT=servicemix.log
OUT=NullPointerException
LINES=20
REV=$(tail -n $LINES $NULLPOINT | grep NullPointerException)



if [ $REV = "$OUT" ];
                then
                /etc/init.d/ls-smx3 stop && sleep 300 && /etc/init.d/ls-smx3 start
        else
            echo "Allting är okej!"
        fi
exit $start

#####
#END#
#####

要获取命令的输出,应该用$()将其包围起来,如下所示

A=$(uname)
echo $A
这相当于

A=`uname`
echo $A

要获取命令的输出,应该用$()将其包围起来,如下所示

A=$(uname)
echo $A
这相当于

A=`uname`
echo $A

您可以这样做:

if tail -n $LINES $NULLPOINT | grep hello >/dev/null; then
    echo expression evaluated as true
else
    echo expression evaluated as false
fi

您不必实际匹配单词(除非您明确希望匹配,否则应修剪“\n”并确保“hello”是该行中唯一的内容)。

您可以执行以下操作:

if tail -n $LINES $NULLPOINT | grep hello >/dev/null; then
    echo expression evaluated as true
else
    echo expression evaluated as false
fi

您不必实际匹配单词(除非您明确希望匹配,否则应修剪“\n”,并确保“hello”是该行中唯一的内容).

它是否包含在最后20行中?
'tail-n$lines$NULLPOINT | grep hello'
——您已将其指定为字符串文字,它将不执行,因此永远不会与“hello”匹配。您将需要使用,即,
“$(..”
。此外,您是否正在查找仅包含单词“hello”的行或其中任何位置包含单词“hello”的行?如果您只想捕获包含hello的行,则应使用一些循环来迭代这些行,如果存在“hello”,则代码将返回true在任何一行中。@LtWorf他都应该使用
grep
,只是使用不同的表达式。它是否包含在最后20行中?
'tail-n$lines$NULLPOINT | grep hello'
——您已将其指定为字符串文字,不会执行,因此永远不会匹配“hello”。您将需要使用,即,
“$(..”
。此外,您是否正在查找仅包含单词“hello”的行或其中任何位置包含单词“hello”的行?如果您只想捕获包含hello的行,则应使用一些循环来迭代这些行,如果存在“hello”,则代码将返回true在任何一行中。@LtWorf他都应该使用
grep
,只是使用不同的表达式。如果您使用
grep-q
@ShawnChin,则无需重定向到/dev/null。谢谢您的评论。旧习难改。这是更干净的方法。此外,如果您想确保like完全由“hello”(即之前或之后没有任何内容)组成,请使用
grep-q“^hello$”
如果您使用
grep-q
@ShawnChin:谢谢您的评论,您将不需要重定向到/dev/null。旧习难改。这是更干净的方法。此外,如果您想确保like完全由“hello”(即之前或之后没有任何内容)组成,请使用
grep-q“^hello$”
谢谢!这就解决了它:)#/本月月月月月月月月月月方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方本月15日举行的第三日日举行的第五日周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五离子)如果[$REV=“$OUT”];然后/etc/init.d/ls-smx3停止和睡眠300&/etc/init.d/ls-smx3开始其他回声“返回”fi退出$start######结束#####谢谢!这就解决了它:)#/本月月月月月月月月月月方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方本月15日举行的第三日日举行的第五日周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五离子)如果[$REV=“$OUT”];然后/etc/init.d/ls-smx3停止和睡眠300&/etc/init.d/ls-smx3开始,否则回显“返回”fi退出$start#####