【发布时间】:2018-09-09 04:14:06
【问题描述】:
我有一个带有 if 和 elif 逻辑的 shell 脚本。我正在尝试使用 grep 命令检查关键字匹配。无论我传递脚本的关键字是什么,都只执行最后一个块。这是我的脚本。
tail -n 0 -F hive-server2.log | \
while read LINE
do
if [ `echo "$LINE" | grep -c "select .*" ` -gt 0 ]
then
AuditTypeID=15
QueryResult=$(grep -oEi 'SELECT .*' hive-server2.log | sed -n \$p)
elif [ `echo "$LINE" | grep -c "CREATE" ` -gt 0 ]
then
AuditTypeID=13
QueryResult="$(grep -oEi 'CREATE EXTERNAL TABLE [a-zA-Z][a-zA-Z0-9_]*' hive-server2.log | sed -n \$p)"
fi
done
如果我通过“select * from table”,它只执行 elif 部分。即使我通过任何查询它正在执行 elif 部分。任何帮助将不胜感激。
【问题讨论】:
-
你在哪里传递参数给这个脚本?你似乎是
tail-ing 从文件中读取行 -
@TejuPriya:附注:第一个 grep 模式中的
.*是多余的。 -
@TejuPriya:在您发布的脚本中,即使是 elif 部分也无法执行。你正在写
tail -n 0,这意味着从日志文件中取出最后的零行,即没有任何东西被输送到循环中并且第一个读取已经失败。如果你真的观察到 elif 部分执行的行为,它不可能来自这个脚本。顺便说一句,结合-n和-F选项没有意义。 -
@TeuPriya 请在您的帖子中向我们展示输入和输出示例,这样我们可以更好地了解要求。
-
第一个select不应该是大写吗?