2016-03-29 29 views
0

私はここで間違っていますか? スクリプトはデフォルトでこのIF文を入力します。&は終了するecho文を表示します。if文の文字列の比較

#!/bin/ksh 


server=$1 
dbname=$2 
IFS=" 
" 
if [[ "${dbname}" != "abc_def_data" || "${dbname}" != "abc_def01_data" ]]; then 
     echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!" 
     exit 0 
fi 
+0

あなたは決して$サーバーを使用していませんが、それは意図的ですか? – Daniele

+1

条件は常にtrueです。 – Mithrandir

+0

私はコードの一部だけをコピーしました... $ serverはスクリプトの後半で使用されます... @Daniele – MRKR

答えて

0

あなたは、これを書こうとしましたか?

if [[ "${dbname}" != "abc_def_data" && "${dbname}" != "abc_def01_data" ]]; then 
     echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!" 
     exit 0 
fi 
+0

私はここで混乱しています... dbnameがabc_def_dataまたはabc_def01_dataと等しくなければ、スクリプトをEXITにします。 – MRKR

+0

それはなぜですか? – Mithrandir

+0

それは私の必要性があるからです。このスクリプトには「dbname」の特定のセットに適用する必要があるタスクがあります。 – MRKR

1

!=の連鎖条件は、思考の反転を必要とする。

私は、case ... esac構造体を使用してこれらの条件をテストする方がはるかに明確です。あなたが本当に*)ケースを見つけるためにしようとしているとして、abc_def_data (etc)試合のためのアクションは何もすることができますが、単にコードの次のセクションにスキップすること

case "${dbname}" in 
    abc_def_data|abc_def01_data) 
     #dbg echo "matched, but for real code replace with just a ':' char" 
     : 
    ;; 
    *) 
     echo "didn_t match any expected values for \$dbname" 
     echo exit 1 
    ;; 
esac 

注意、あなたはシェルのヌルCMDを必要とするだけでしょう:。私は、あなたのシェルは終了しませんあなたが/コピーした場合、コマンドラインにこれ​​を貼り付けるだけので、echo exit 1を持って

編集1

注意。実際のコードでは、echoを削除し、exitが動作することを期待してください。

編集も

2、ケースマッチ(abc_def_data**|**abc_def01_data)で| charは本質的であることに注意しOR(私はそれが「ケース・マッチ」コンテキストで何かを呼ばれると思います)。 IHTH

+0

"dbname"ごとに、スクリプトはIF文に入り、終了します。 dbnameがabc_def_dataまたはabc_def01_dataと等しくない場合、スクリプトはechoステートメントを終了して終了する必要があります... dbnameがどちらかと等しい場合、EXIT&EXITを実行して次のステップに進んではいけません。 – MRKR

+0

はい、あなたの質問を読んで理解しました。 'if ... fi'ブロックをこの' case ... esac'ブロックに置き換えてみましたか?あなたが説明しているとおりに動作するはずです。 'abc_def_data | abc_def01_data | bcd_def_data | bcd_def01_data | ....'のように、OKのリストを "wide"として拡張することができます。がんばろう。 – shellter

+0

答えの**編集**を参照してください。がんばろう。 – shellter

0

はこの男を試してみてください、それだけで正常に動作する必要がありますが がところでそれは罰金私のために働いた....「[]」、代わりに||の-oを使用して条件を区切っている必要があります。..

server=$1 
dbname=$2 
IFS="" 

if [ "${dbname}" != "abc_def_data" ] -o [ "${dbname}" != "abc_def01_data" ] 
     then 
     echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!" 
     exit 0 
fi