我正在编写一个非常简单的shell脚本,它会查看所有失败测试的日志,并打印出当前目录中日志中所有文件的所有名称
1 #! /bin/sh
2 for file in *
3 do
4 echo "checking: $file"
5 if [$(grep $file failed.txt -c) -ne 0]
6 then
7 echo "$file FAILED"
8 fi
9 done
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我收到此错误:
line 6: [0: command not found
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?
谢谢!!
Dun*_*nes 27
[ 实际上是linux中的命令(如bash或cat或grep).
$(grep $file failed.txt -c)是一个命令替换,在你的情况下计算为0.因此该行现在读取[0 -ne 0],这被解释为运行一个[0用参数调用的程序-ne 0].
你应该写的是[ $(grep $file failed.txt -c) -ne 0 ].Shell脚本要求开始和结束方括号之间有空格.否则,您将更改执行的命令(结束]表示没有更多参数可供读取.
所以现在命令评估为[ 0 -ne 0 ].您可以尝试在shell中执行此操作以查看会发生什么.[具有值退出0如果表达式为真,1如果是假的.您可以通过echoing $?(要运行的最后一个命令的退出值)查看退出值.
您可以测试返回代码,而不是测试计数grep:
if grep -q $file failed.txt &>/dev/null
Run Code Online (Sandbox Code Playgroud)