2014-01-27 60 views
0

我試圖做一個簡單的,如果,但不知何故,它不工作。猛砸如果pass雖然它不應該

代碼:

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 

這怎麼可能呢?

+1

'grep'可以讀取文件;使用'grep -i「ORA-」/tmp/rcrt_unusable_indexes.log | wc -l';實際上,它也可以計數:'grep -i -c「ORA-」/ tmp/rcrt_unusable_indexes.log'。另外,不要忘記從當前目錄中刪除名爲'0'的文件。您調用'['創建該文件。你可以使用'[[...]]'並使用'>'代替''和'-gt'。 –

回答

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

4

有沒有必要使用wc和檢查結果。如果找到任何匹配(對應於非空輸出),則grep將成功,否則失敗。直接測試grep的退出狀態,而不是測試[命令的退出狀態。

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

-q防止grep從實際產生任何輸出,當你只是檢查退出狀態則不需要。