shell脚本在单个if条件下的多个条件

时间:2017-11-03 05:57:28

标签: shell if-statement

在下面的代码中,在/ bin / sh中,为什么在满足第一个条件时评估-o的第二个条件。 场景是$ output有多个" ORA - "字符串在单独的行中,但它没有" INVALID_OBJECTS"串。所以第一部分是真的,但第二部分变成

  

"" -gt 0

失败
  

sh:[:缺少`]'

if [ "`echo "$output" | grep ORA-`" -o "`echo "$output" | awk '/INVALID_OBJECTS/{getline;getline;print $0}' | sed 's/\s//g'`" -gt 0 ]; then
        echo -e "\n*** ERROR:  ***\n"
fi

更新: $ output保存pl-sql块的stdout。最终用户在执行pl-sql块期间输入了Ctrl + C,导致失去与SQL * Plus的连接。所以stdout最终得到了多个" ORA-nnnnn"错误。如果没有丢失连接,我会在$ output中得到以下行,在-o check的左侧检查。

INVALID_OBJECTS  
_ _ _ _ _ _ _ _ _ _  
                   3

1 个答案:

答案 0 :(得分:0)

好吧,让我们先简化你的表达,删除不必要的引号。测试命令基本归结为:

[ `echo $output | grep ORA-` -o `echo $output | awk '/INVALID_OBJECTS/{getline;getline;print $0}' | sed 's/\s//g'` ]

所以-o左边基本上有零个或多个单词(取决于grep的收益率),后面是{{1}右边的零个或一个单词(取决于awk的收益率) 1}}。

现在我不知道你想在这里实现什么,但你可以从这个分析中看出,你的命令没有意义。