我正在尝试做一个简单的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
怎么可能?
无需使用wc
并检查结果。 如果找到任何匹配项(对应于非空输出),grep
将成功,否则将失败。直接测试grep
的退出状态,而不是测试[
命令的退出状态。
if grep -q -i "ORA-" /tmp/rcrt_unusable_indexes; then
-q
防止grep
实际产生任何输出,当您只是检查退出状态时,您不需要这些输出。
要进行此比较,请使用-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 参考手册中的更多参考资料 - Bash 条件表达式。