2012-03-01 6 views
1

正規表現をbashで正しく使用する方法がありません。このようにしてエラーが発生しました。正規表現検証で何が間違っていますか?正規表現を使用したBashパラメータの検証

#!/bin/bash 

if [ ! $# -eq 1 ]; then 
     echo "Error: wrong parameters" 
else 
     if [ $1 =~ "[a-z]" ]; then 
       echo "$1: word" 
     elif [ $1 =~ "[0-9]" ]; then 
       echo "$1: number" 
     else 
       echo "$1: invalid parameter" 
     fi 
fi 
+0

このような簡単なチェックのために、 'case'を考えてみましょう。 'case $ 1 in * [!A-Za-z0-9] *)echo invalid ;; * [A-za-z] *)エコーワード; '')echo empty ;; *)エコー番号; esac' – tripleee

答えて

10

私は、スクリプトを再加工し、次に期待される結果を取得しています

#!/bin/bash                                              
    if [ ! $# -eq 1 ]; then 
    echo "Error: wrong parameters" 
    else 
    if [[ $1 =~ ^[a-z]+$ ]]; then 
     echo "$1: word" 
    elif [[ $1 =~ ^[0-9]+$ ]]; then 
     echo "$1: number" 
    else 
     echo "$1: invalid parameter" 
    fi 
    fi 

あなたの正規表現を引用する必要はありません。

+3

それ以上のことは正規表現を引用してはいけません: "パターンの任意の部分を引用符で囲んで強制的に文字列にマッチさせる" –

-1

使用2つのブラケット:

if [[ "$1" =~ [a-z] ]] ; then 
+0

私はまだ "無効なパラメータ"を得る –

+0

+1は最初に答えるが、正規表現から引用符を削除しないでください。 – anubhava

+1

fair :-D – asf107

5

Don't quote the regex、および二重括弧を使用します。それは厳密にこの特定のケースでは、変数を引用する必要はありませんが、それはない

[[ "$1" =~ [a-z] ]] 

word splittingに関連する非常に非常に多くの落とし穴のために、変数を含む文字列を常に引用するのは良い習慣です。

+0

Thanks l0b0、それはうまくいきます、あなたはなぜ2つの括弧を説明できますか? –

+2

二重の角かっこは、正規表現マッチング演算子 '=〜' –

+0

Okを実装するbash固有の[条件付き構造体](http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs)を示します。 、グレンに感謝します。 –

関連する問題