无法在bash循环中从grep获得结果

时间:2018-06-29 08:22:26

标签: linux bash shell

我正在尝试使用grep + tail -1从日志文件中获取信息:

#!/bin/bash
# declare an array called array and define 3 vales
array=( 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 )
array2=( 00 30 )
for i in "${array[@]}"
do
        for j in "${array2[@]}"
        do
                 output=$(grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* | tail -1)
                 echo /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j*
                 echo "$output"
        done
done

这只输出空字符串,但我绝对知道日志中有短语“ filtered”。

可能是什么问题? 我尝试了同一脚本的多种变体,但它只返回空字符串。

谢谢!

2 个答案:

答案 0 :(得分:1)

在这种输出值分配中,应始终将标准错误(stderr)重定向到标准输出(stdout)。在您的情况下,如果grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j*失败,错误输出将不会存储在变量output中,因此您很难调试程序。如下所述更改脚本,其中错误消息也将分配给变量output

output=$(grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* 2>&1 | tail -1)

现在,如果搜索字符串不可用echo $output将打印一个空字符串,如果日志文件不可用,它将显示错误消息

希望这会对您有所帮助。

答案 1 :(得分:-1)

首先,也许尝试测试通过构建字符串“ tabatoo2_20180627 $ i $ j *”获得的文件是否存在。