または、ifステートメントを使用してシェルスクリプトのパラメータを検証します。

または、ifステートメントを使用してシェルスクリプトのパラメータを検証します。

異なる環境で複数のApacheインスタンスを再起動するためのbashスクリプトを作成しています。正しいパラメータのみを入力するようにいくつかのロジックを追加したいことを除いてうまくいきます。私はいくつかの方法で次の文を試しましたが、幸運ではありません。どんな提案がありますか?

if [[ $ENVT != qa || $ENVT != qa2 || $ENVT != stageqa || $ENVT != stage ]];
  then
    usage
fi

ステージ環境を使用するときは、開いたset -xときと同じように繰り返すのではなく、最初のオプションを評価して関数を呼び出します。

+ ENVT=stage
+ ACTION=stop
+ USER=www
+ '[' 2 -ne 2 ']'
+ [[ stage != qa ]]
+ usage

答え1

ifこの場合、複数の条件を使用せず、case代わりに次のように使用します。

case "$ENVT" in
  (qa|qa2|stageqa|stage) ;;
  (*) usage ;;
esac

答え2

期待した品質保証、品質保証2など。より複雑なテストのための価値。もし彼らが本当なら価値、@Gnoucのソリューションは次のとおりです。はるかに良い確かに。
元のサンプル構文に関する教育的価値については、この回答をここに残しておきます。


「!=」で使用するには、「and」が必要な場合があります。

その場合は、多くの式や演算子を一緒に連結しないでください。

if [[ a1 != b1 ]] && [[ a2 != b2 ]] && [[ a3 != b3 ]] ...

それは次のとおりです。

if [[ "$ENVT" != qa ]] && [[ "$ENVT" != qa2 ]] && [[ "$ENVT" != stageqa ]] && [[ "$ENVT" != stage ]];
then
    usage
fi

ご覧のとおり、変数の周りに引用符を追加しました。これは二重[[]]の内部では必ずしも必要ではありませんが、[]のようなほとんどどこでも非常に似ています。いつも引用に慣れるのは難しく、引用し続けます。

関連情報