このパターンと一致する必要が1001-N-Nあり、他のものは無視する必要があります。

このパターンと一致する必要が1001-N-Nあり、他のものは無視する必要があります。

私のホスト名は次のとおりです。

www-foo-1001-1-1.example.com

次の文字列一致を使用してアプリケーションをデプロイする必要があるスクリプトを作成しています。1001-<any digit>-<any digit>

例: スクリプトは、次のホスト名と一致する必要があります。

www-foo-1001-1-49
www-foo-1001-4-37
www-foo-1001-2-12
www-foo-1001-8-4

ホスト名でこのパターンを無視してください。

www-foo-1001-1-2-49
www-foo-1001-1-1-49
www-foo-1001-1
www-foo-1001

このパターンと一致する必要が1001-N-Nあり、他のものは無視する必要があります。

実行の詳細については、完全修飾ホスト名と一致しないエラーを発生させるステータスコードをif then..返したいと思います。exit$?

答え1

強く打つ拡張モード内部で有効になっているため、[[ ... ]]次のことができます。

hosts=( www-foo-1001-1-49 www-foo-1001-4-37 www-foo-1001-2-12 www-foo-1001-8-4 www-foo-1001-1-2-49 www-foo-1001-1-1-49 www-foo-1001-1 www-foo-1001 )
pattern='*-1001-+([[:digit:]])-+([[:digit:]])'
for h in "${hosts[@]}"; do
    if [[ $h == $pattern ]]; then
        echo "OK: $h"
    else
        echo "no: $h"
    fi
done
OK: www-foo-1001-1-49
OK: www-foo-1001-4-37
OK: www-foo-1001-2-12
OK: www-foo-1001-8-4
no: www-foo-1001-1-2-49
no: www-foo-1001-1-1-49
no: www-foo-1001-1
no: www-foo-1001

私のパターンは、*-1001-あなたが一致したくないと仮定するところから始まります1100121001

==in の演算子はパターン[[ ... ]]一致演算子です。

右のオペランドはパターン変数ですが引用しない。これにより、変数の値を次のように解釈できます。模様一つでもないひも

答え2

バッシュ使用:

$ touch www-foo-1001  www-foo-1001-1  www-foo-1001-1-1-49  www-foo-1001-1-2-49  www-foo-1001-1-49  www-foo-1001-2-12  www-foo-1001-4-37  www-foo-1001-8-4
$ for f in *
do
  [[ $f =~ 1001-[[:digit:]]+-[[:digit:]]+$ ]] && printf 'Yes: %s\n' "$f"
done
Yes: www-foo-1001-1-49
Yes: www-foo-1001-2-12
Yes: www-foo-1001-4-37
Yes: www-foo-1001-8-4

これはbashの正規表現条件演算子を使用して引数をテストします。

  • 含む1001-
  • その後、いくつかの数字が続きます。
  • それから-
  • その後、いくつかの数字が続きます。
  • 以下は何も従わない。$

答え3

kapu@ppc:$ ls
www-foo-1001        www-foo-1001-1-1-49 www-foo-1001-1-49   www-foo-1001-4-37
www-foo-1001-1      www-foo-1001-1-2-49 www-foo-1001-2-12   www-foo-1001-8-4
kapu@ppc:$ ls | awk '/www-foo-1001-[0-9]+-[0-9]+$/{print}'
www-foo-1001-1-49
www-foo-1001-2-12
www-foo-1001-4-37
www-foo-1001-8-4

関連情報