Bash IF虽然不应该通过

时间:2014-01-27 15:48:54

标签: linux bash if-statement

我正在尝试做一个简单的if,但不知何故它不起作用。

代码:

if [ `cat /tmp/rcrt_unusable_indexes.log | grep -i "ORA-" | wc -l` > 0 ]
then
    echo "ERROR at in /tmp/rcrt_unusable_indexes.log . EXIT script."  >> ${LOG_PATH}
    exit 1;
fi

测试:

bash-4.1$ cat /tmp/rcrt_unusable_indexes.log | grep -i "ORA-" | wc -l
0
bash-4.1$ if [ `cat /tmp/rcrt_unusable_indexes.log | grep -i "ORA-" | wc -l` > 0 ]
> then
> echo 1
> fi
1        <------- this is the result

怎么可能?

2 个答案:

答案 0 :(得分:4)

无需使用wc并检查结果。如果找到任何匹配(对应于非空输出),grep将成功,否则将失败。直接测试grep的退出状态,而不是测试[命令的退出状态。

if grep  -q -i "ORA-" /tmp/rcrt_unusable_indexes; then

-q阻止grep实际产生任何输出,当您只是检查退出状态时,您不需要输出。

答案 1 :(得分:3)

要进行此比较,请使用-gt

if [ `cat /tmp/rcrt_unusable_indexes.log | grep -i "ORA-" | wc -l` -gt 0 ]; then...

总是更好地摆脱猫的无用,以及$()而不是``:

if [ $(grep -i "ORA-" /tmp/rcrt_unusable_indexes | wc -l) -gt 0 ]

Bash Reference Manual - Bash conditional expressions中的更多参考资料。