在bash脚本中获取文件尾部的值并存储为变量



我不知道我做错了什么。我真正想做的是在我的bash脚本中运行这个命令,并获取值:

tail -1 com-html.log | grep 'Min: ,'

这在手动运行时有效:

tail -1 com-html.log | grep 'Min: ,'
Min: , MAX:

然而,我无法让它在bash脚本中工作:(我已经简化了它,以防管道位出现问题)

#!/bin/bash
test = $(tail -1 com-html.log)
echo "test: $test";

我做错了什么?Bash对我来说很新鲜,所以请温柔=)

根据以下建议-我甚至尝试过:

test=$(tail -1 com-html.log | grep 'Min: ,');
echo "test: $test"
if [ -z "$test"]
then
echo "hmmm test is empty"
fi

但它总是显示:

hmmm test is empty

我一定错过了什么愚蠢的

我尝试了几种方法:

test=$(tail -1 com-html.log | grep 'Min: ,')
echo "test: $test";
test=$(tail com-html.log | grep 'Min: ,')
echo "test: $test";

甚至最简单的就是看看我是否得到了任何值:

test=$(tail -1 com-html.log)
echo "test: $test";

所有这些都有$test作为空

更新:天哪,这就是为什么一天不应该做太多编码的原因。你错过了愚蠢的东西!因此,这个脚本关注服务器和RAM的负载。如果它检测到其中一个过高,它将终止脚本,并等待它重新启动。所以我有这样的东西:

if [ -n "$(ps -ef | grep -v grep | grep 'get-html-all-domains.cgi')" ];
then : ;
else
echo "nohup perl get-html-all-domains.cgi $tld new $forks $per_page > com-html.log"
nohup perl get-html-all-domains.cgi $tld new $forks $per_page > com-html.log &  # restart it...
fi

现在这是可行的,但当它触发时,com-html.log的输出并不是即时的(因为它必须从DB中获取值,然后决定没有什么可运行的)。所以为了避开它,我改了一条线:

nohup perl get-html-all-domains.cgi $tld new $forks $per_page > com-html.log &

至:

nohup perl get-html-all-domains.cgi $tld new $forks $per_page >> com-html.log &

(请注意>而不是现在的>所以它是附加的,而不是完全覆盖它)

然后在最后检查最后一行是否是我们要找的:

if [ -n "$(tail -2 com-html.log | grep 'Min: ,')" ]
then
echo "2: Seems to be at end... lets stop :)"
echo -ne '07'
exit 0
fi

tail -1只显示com-html.log的最后一行

因此,如果grep字符串(Min: ,)不在最后一行,则test将为空。

变量的最后一行

test=$(tail -1 com-html.log)
echo "test: $test";

任何包含Min: ,的行

test=$(grep 'Min: ,' < test.log)
echo "test: $test";

最后一行;如果包含Min: ,,请在线试用

test=$(tail -1 com-html.log | grep 'Min: ,')
echo "test: $test";

最新更新