2017-11-03 22 views
0

以下のコードの/ bin/shでは、最初の条件が満たされたときに-oの2番目の条件が評価されるのはなぜですか? このシナリオでは、$ outputには別々の行に複数の "ORA-"文字列がありますが、 "INVALID_OBJECTS"文字列はありません。だから、最初の部分は真実であるが、第二部は、UPDATE単一の条件のシェルスクリプト複数の条件

sh: [: missing `]'

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 

で失敗

"" -gt 0

次のようになります。 $出力はPL-SQLブロックの標準出力を保持しています。エンド・ユーザーは、pl-sqlブロックの実行中にCtrl + Cを入力したため、SQL * Plusへの接続が失われました。したがって、stdoutは複数の "ORA-nnnnn"エラーを持つことになりました。接続が失われていなければ、-oチェックの左側で$ outputに次の行があるはずです。

INVALID_OBJECTS 
_ _ _ _ _ _ _ _ _ _ 
        3 
+0

'echo $ output | grep ... ||エコー$出力| awk ... || echo -e "\ n ***エラー:*** \ n" '? –

答えて

0

さて、まず不要な引用符を削除して、式を単純化してみましょう。

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

だからあなたは、ゼロまたは1つの単語に続く-oの左側に、(何awkの利回りに応じて、(grepの利回りはどのように依存する)は、基本的にゼロ以上の単語を持っている:testコマンドは、基本的に沸きます)を-oの右側に追加します。

ここで達成したいことは何もわかりませんが、この分析ではコマンドが意味をなさないことがわかります。

+0

クエリをより良い情報で更新しました –

+0

しかし、 '[.....]'の中の '-o'は2つの式の論理的なものです。 '-o'演算子のどちらの側にも論理式がありません! – user1934428