【发布时间】:2017-05-21 21:16:28
【问题描述】:
我在 shell 脚本 if 语句中遇到了 tail 和 grep 的问题。如果我在 shell 中运行 tail -5 mylog.log | grep -c "Transferred: 0",它会正常运行,但是在这个 shell 脚本中的 if 语句:
# Parse log for results
if [ tail -1 "$LOGFILE" | grep -c "Failed" ] ; then
RESULT=$(tail -1 "$LOGFILE")
elif [ tail -5 "$LOGFILE" | grep -c "Transferred: 0" ] ; then
RESULT=""
else
RESULT=$(tail -5 "$LOGFILE")
fi
我明白了
... [: missing `]'
grep: ]: No such file or directory
两个 grep 行。
这显然与关闭 ] 被视为 grep 的一部分(因此丢失)有关,但我使用了正确的空格,所以我无法弄清楚发生了什么?我在这里做错了什么?
谢谢, PJ
【问题讨论】:
-
[ ]不是if语法的一部分。这是一个单独的命令。 -
坦率地说,这只是效率低下——它至少调用了两次
tail。调用一次然后在本机 bash 中测试结果要好得多。 -
顺便说一句,在此处提问之前,请考虑通过shellcheck.net 运行您的代码。
-
我如何通过只调用一次
tail来解决这个问题?顺便说一句,感谢 shellcheck.net。 -
我已经扩展了我的答案,以展示一种只有一个
tail调用(并且根本没有grep调用)的方法。
标签: bash shell if-statement grep tail