私のホスト名は次のとおりです。
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-
あなたが一致したくないと仮定するところから始まります11001
。21001
==
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