不能让我的if在我的shellcript中工作

时间:2013-05-20 14:12:20

标签: linux bash if-statement tail

尽可能简单。

我希望这个脚本在名为“out.log”的日志文件中捕获一条说“hello”的行。 我遇到的问题是它总是将“echo表达式评估为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#
#####

2 个答案:

答案 0 :(得分:2)

您可以这样做:

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

你不必真正匹配这个词(除非你明确地想要这个,所以你应该修剪' \ n'并确保'你好'它' ;那是该行唯一的事情。)

答案 1 :(得分:1)

要获取命令的输出,您应该使用$()这样的

包围它
A=$(uname)
echo $A

相当于

A=`uname`
echo $A