Bash正規表現比較オペレータ

11122 ワード

Bash正規表現比較オペレータ
Bash 3.0から、Bashには内部の正規表現比較オペレータがあり、"=~"で表されます.grepまたはsedコマンドの正規表現を使用してスクリプトを記述する方法の大部分は、"=~"オペレータのBash表現で処理できます.
式の左側の変数が右側の正規表現に一致する場合、ステータスコード0が返され、そうでない場合は1が返されます.
例えば:
1つの数が10進数であるかどうかを確認します

[root@rs1 test2]# cat digit.sh 
#!/bin/bash

digit=$1
if [[ $digit =~ [0-9] ]]
then
    echo "$digit is a digit."
    else
        echo "Oops!"
fi
スクリプトの実行:

[root@rs1 test2]# bash digit.sh 3
3 is a digit.
[root@rs1 test2]# bash digit.sh a
Oops!
入力が数値であるかどうかを確認します.
[root@rs1 test2]# cat num.sh 
#!/bin/bash

#      ,     num
read -p "Input a number,Please:" num

#    num       ,   if  ,    else  
if [[ $num =~ ^[0-9]+$ ]]
then
    echo "$num is a number."
else
    echo "$num is not a number."
fi
スクリプトの実行:

[root@rs1 test2]# bash num.sh 
Input a number,Please:12
12 is a number.
[root@rs1 test2]# bash num.sh 
Input a number,Please:ad
ad is not a number.
[root@rs1 test2]# bash num.sh 
Input a number,Please:12ad
12ad is not a number.
[root@rs1 test2]# bash num.sh 
Input a number,Please:ad12
ad12 is not a number.
入力がemailアドレスかどうかを確認します
[root@rs1 test2]# cat email.sh 
#!/bin/bash

#      ,        email 
read -p "Please Input a email address:" email

#  email  if    email  ,    else  
if [[ $email =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$ ]]
then
    echo "$email is a email address."
else
    echo "$email is NOT a email address."
fi
^[A-Za-z 0-9.%+-]+@[A-Za-z 0-9.-]+.[ A-Za-z]{2,4}$はemail形式です.
スクリプトの実行:

[root@rs1 test2]# bash email.sh 
Please Input a email address:[email protected]
[email protected] is a email address.
[root@rs1 test2]# bash email.sh 
Please Input a email address:[email protected]
[email protected] is a email address.
[root@rs1 test2]# bash email.sh
Please Input a email address:[email protected]
[email protected] is NOT a email address.
変数がIPV 4アドレスであるかどうかを確認します

[root@rs1 test2]# cat ip_1.sh 
#!/bin/bash   

if [ $# != 1 ]
then
    echo "Usage : $0 address"
    exit 1
else
    IP=$1
fi

function check_ip() {   
    if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then   
        FIELD1=$(echo $IP|cut -d. -f1)   
        FIELD2=$(echo $IP|cut -d. -f2)   
        FIELD3=$(echo $IP|cut -d. -f3)   
        FIELD4=$(echo $IP|cut -d. -f4)   
        if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]
    then   
            echo "$IP is an ipv4 address."   
        else   
            echo "$IP looks like an ipv4 address BUT not!"   
        fi   
        else   
            echo "$IP is not an ipv4 address!"   
    fi
     } 

check_ip $1 
スクリプトの実行:

[root@rs1 test2]# bash ip_1.sh 172.25.254.11
172.25.254.11 is an ipv4 address.
[root@rs1 test2]# bash ip_1.sh 172.25.254.1111
172.25.254.1111 is not an ipv4 address!
[root@rs1 test2]# bash ip_1.sh 172.25.254.256
172.25.254.256 looks like an ipv4 address BUT not!
これは単純なテストが合法的なIPV 4アドレスであるかどうかであり、255.255.255.255.255が必要であればブロードキャストアドレスであり、自機のIPアドレスと比較してユニキャストアドレスを取得し、フィルタリングすべきであり、サブネットマスクアドレスでもある.