複数または文で条件を単純化する方法は?

複数または文で条件を単純化する方法は?

パラメータが文字列と一致することを確認するためにシェルスクリプトを作成しています。約20個ほどあり、今後さらに追加する必要があるかもしれません。

現在、私が書く方法は読みにくく、更新するのが面倒です。私はシェルスクリプティングに慣れていないので、これを単純化し管理するのが簡単な最善の方法を知りません。

if [ $4 =="CRITICAL" ] && [[ $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || ]]
  VARIABLE=1
fi

上記のスクリプトでは、Fooとbarは両方とも異なる文字列です。

ベストアンサー1

標準シェルでは、case代替をサポートするを使用できます。

#!/bin/sh
if [ "$4" = CRITICAL ]; then
        case $2 in
        foo|bar|doo|quux)
                VARIABLE=1
                ;;
        esac
fi

上記の5行がcase長すぎる場合は、1行に書きます。

 case $2 in foo|bar|doo|quux) VARIABLE=1;; esac

これは==Bashの標準ではありませんが、[ .. ]Bashとkshでサポートされています。

おすすめ記事