回答
不要重新发明轮子。
use strict;
use warnings;
use Regexp::Common qw/net/;
# see http://search.cpan.org/dist/Regexp-Common/lib/Regexp/Common/net.pm
my $Address = '...';
# adapted from the module's synopsis
for ($Address) {
/$RE{net}{IPv4}/ and print "Dotted decimal IP address";
/$RE{net}{IPv4}{hex}/ and print "Dotted hexadecimal IP address";
/$RE{net}{IPv4}{oct}{-sep => ':'}/ and
print "Colon separated octal IP address";
/$RE{net}{IPv4}{bin}/ and print "Dotted binary IP address";
/$RE{net}{MAC}/ and print "MAC address";
/$RE{net}{MAC}{oct}{-sep => " "}/ and
print "Space separated octal MAC address";
}
使用你所需要的一个。
如果您无法安装模块,那么只需潜入模块的代码并获取正确的正则表达式即可使用,具体取决于您希望匹配的IP地址类型。
或者,只要使用类似上面的内容,并调用相同的子地址,如果地址匹配您想要的任何符号或沿着这些线的东西。
从shell脚本利用这将是沿着线:
return perl -e'use Regexp::Common qw/net/;$ip=shift;if ($ip =~ /$RE{net}{IPv4}/){exit 0}else{exit 1}' "$Address";
以上将取代你的完整的“案例”块。
同样,如果您需要在perl脚本调用中内联正则表达式,您可以通过阅读模块的代码来实现。
check(){
case "$1" in
[0-9]|[0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5]) echo "0";;
*) echo "1";;
esac
}
ip="$1"
OIFS="$IFS"
IFS="."
set -- $ip
result="$(check $1)$(check $2)$(check $3)$(check $4)"
case "$result" in
"0000") echo "IP $ip Ok";;
*) echo "IP $ip not ok";;
esac
IFS="$OLDIFS"
在0-255范围内的差不多三分之一(例如106和239)。为什么不这样做:在[0-9] | [0-9] [0-9] | [0-2] [0-9] [0-9])(($ 1)中检查(){case“$ 1” > = 0 && $ 1 <= 255))&& echo“0”||回声“1”;; *)echo“1”;; ESAC; }'验证只有数字并且它们落在适当的范围内? – 2010-08-27 04:10:11
你是对的。增加了更多检查。不用整数比较方法。 – ghostdog74 2010-08-27 06:48:47
击> = 3.2版(这可以大大缩短了):
valid() {
if [[ $1 =~ ^[[:digit:]]+$ ]] &&
(($1 >= 0 && $1 <= 255))
then
echo "0"
return 0
else
echo "1"
return 1
fi
}
saveIFS=$IFS
IFS='.'
ip=($1)
IFS=$saveIFS
for octet in ${ip[@]}
do
if ! valid $octet > /dev/null
then
valid=1
fi
done
[[ $valid != 1 ]] && echo "Good address" || echo "Bad address"
ip =($ 1)在ksh中无效 – lidia 2010-09-02 11:20:31
拆分而不被逐位移触摸IFS和避免复杂的检查地址:
declare -a part=(${ip//\./ })
declare -i valid=0
for p in ${part[@]}; do
if [[ $p =~ ^[[:digit:]]+$ ]] ; then
((valid += p>>8))
else
((valid++))
fi
done
if [ $valid -eq 0 ] ; then
echo -e "$ip OK"
else
echo -e "$ip NOT OK"
fi
这里是一种更简单,更简单的方法。它只检查基本结构,但在某些情况下它已足够。
VALID=$(echo $IP | egrep '^[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}$');
if [ ! -n "$VALID" ]; then
echo "This IP ($IP) isn't valid. Please check it and try again.";
exit 0;
fi;
保存IP地址ip_server并使用下面的代码检查:
if [[ "$ip_server" =~ ^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})$ ]]
then
for ((i=1; i<${#BASH_REMATCH[@]}; ++i))
do
((${BASH_REMATCH[$i]} &2; exit 1; }
done
else
echo "Wrong IP address" >&2
exit 1;
fi
- 1. Shell脚本,grep有效的IP解释
- 2. Shell脚本来验证根密码
- 3. Shell脚本来验证文件名
- 4. bash脚本 - 无法验证IP
- 5. 如何验证Python脚本的语法?
- 6. 有效的方法来验证XML?
- 7. 用于验证列的shell脚本
- 8. shell脚本 - 检查语法
- 9. shell脚本:语法错误
- 10. 验证CSS是否有效语法
- 11. 在shell脚本验证JSON文件的语法,而无需安装任何包
- 12. 使用bash脚本验证IP地址
- 13. 脚本来验证生日
- 14. 脚本来验证域
- 15. shell脚本linux,验证整数
- 16. 在Shell脚本中验证变量
- 17. 语法错误:“(”意外的shell脚本
- 18. 神秘的shell脚本语法
- 19. shell脚本来验证列csv文件列
- 20. 方法来验证使用jQuery的所有文本框验证
- 21. 脚本语言shell?
- 22. Groovy脚本来验证JMeter中的ResponseData
- 23. 自动IP变更的Shell脚本
- 24. 来自shell脚本的Javascript
- 25. 来自Shell脚本的SSH
- 26. 用于验证github凭证的Shell脚本
- 27. 从shell脚本到cshell脚本的语法更改是什么?
- 28. Inno Setup脚本中的基本IP验证
- 29. 验证用户输入的短语Java
- 30. 客户端脚本生成非有效的HTML验证
不好,我需要这个语法我的shell脚本的一部分 – lidia 2010-08-26 12:53:53
读该位“如果你不能安装模块...“:只要阅读模块的代码,并使用正确的正则表达式来获得你想要的。如果您需要,我将使用IPv4的正则表达式更新它 – mfontani 2010-08-26 13:02:45