Bash正規表現比較オペレータ
11122 ワード
Bash正規表現比較オペレータ
Bash 3.0から、Bashには内部の正規表現比較オペレータがあり、"=~"で表されます.grepまたはsedコマンドの正規表現を使用してスクリプトを記述する方法の大部分は、"=~"オペレータのBash表現で処理できます.
式の左側の変数が右側の正規表現に一致する場合、ステータスコード0が返され、そうでない場合は1が返されます.
例えば:
1つの数が10進数であるかどうかを確認します
スクリプトの実行:
Bash 3.0から、Bashには内部の正規表現比較オペレータがあり、"=~"で表されます.grepまたはsedコマンドの正規表現を使用してスクリプトを記述する方法の大部分は、"=~"オペレータのBash表現で処理できます.
式の左側の変数が右側の正規表現に一致する場合、ステータスコード0が返され、そうでない場合は1が返されます.
例えば:
1つの数が10進数であるかどうかを確認します
[root@rs1 test2]# cat digit.sh
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
# , 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
# , 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
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アドレスと比較してユニキャストアドレスを取得し、フィルタリングすべきであり、サブネットマスクアドレスでもある.