-2

指定された引数をチェックし、それに接続するIPであるかどうかを確認するケースステートメントを作成しようとしています。IP の確認に問題があります。

case $1 in
-h)
    echo "usage: $0 <IP/DNS/IP range> <Port/Portrange>";
    ;;
--help)
    echo "usage: $0 <IP/DNS/IP range> <Port/Portrange>";
    ;;
    [1-255].[0-255].[0-255].[0-255] )

上記の正規表現は、1.1.1.1または同じ IP に対してのみ機能します。

4

1 に答える 1

3

文字クラスは単一の文字を定義します。したがって[1-255]、1 ~ 2、または 5、または 5 の範囲内の 1 文字に一致します (繰り返しますが)。

構文に固執したい場合の適切な修正caseは、許可されていないバリアントを除外してから、実際の処理に移行することです。

*[!.0-9]* | *.*.*.*.* | .* | *. | *[0-9][0-9][0-9][0-9]* \
  | *2[6-9][0-9]* | *25[6-9]* )
    error ;;
# require three dots
*.*.*.* ) ... Success scenario ... ;;
* ) error ;;

(私がまだ見落としているいくつかのコーナーケースがあると確信しています。)

コードを単純化するために、変数を使用して、成功のシナリオでrealip=falseそれを設定してから、 の後に単純化を行い、 内のコードを可能な限り単純に保つことができます。trueif $realipesaccase

ちなみに、 でサポートされcaseているパターンは glob パターンであり、真の正規表現ではありません。

于 2012-12-31T09:52:05.350 に答える