如何检查shell脚本中IP地址的有效性,即在0.0.0到255.255.255范围内
如果您使用的是bash,则可以对模式执行简单的正则表达式匹配,而无需验证四边形:
#/usr/bin/env bash
ip=1.2.3.4
如果[[$ip=~^[0-9]+\[0-9]+\[0-9]+\[0-9]+\[0-9]+$];然后
呼应“成功”
其他的
回应“失败”
fi
如果您一直使用POSIX shell,那么您可以使用expr执行基本相同的操作,使用BRE而不是ERE:
#/垃圾箱/垃圾箱
ip=1.2.3.4
如果表达式“$ip”:“[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$”>/dev/null;然后
呼应“成功”
其他的
回应“失败”
fi
请注意,expr假定正则表达式锚定在字符串的左侧,因此不需要初始的^
如果验证每个四边形是否小于256很重要,则显然需要更多代码:
#/垃圾箱/垃圾箱
ip=${1:-1.2.3.4}
如果表达式“$ip”:“[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$”>/dev/null;然后
我在1234;做
如果[$(回显“$ip”|切割-d.-f$i)-gt 255];然后
echo“失败($ip)”
出口1
fi
完成
echo“成功($ip)”
出口0
其他的
echo“失败($ip)”
出口1
fi
或者,甚至使用更少的管道:
#/垃圾箱/垃圾箱
ip=${1:-1.2.3.4}
如果表达式“$ip”:“[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$”>/dev/null;然后
如果=。
设置$ip
适用于1-2-3-4中的四边形;做
如果评估[\$$quad-gt 255];然后
echo“失败($ip)”
出口1
fi
完成
echo“成功($ip)”
出口0
其他的
echo“失败($ip)”
出口1
fi
或者,如果您的shell是bash,如果您不喜欢算术,您可以使用一个繁琐的正则表达式进行四边形验证:
#/usr/bin/env bash
ip=${1:-1.2.3.4}
re='^(0*(1?[0-9]{1,2}2([0-4][0-9]{5[0-5])\){3}'
re+='0*(1?[0-9]{1,2}| 2([0-4][0-9]|5[0-5]))$'
如果[[$ip=~$re]];然后
呼应“成功”
其他的
回应“失败”
fi
这也可以用BRE来表达,但这比我用手指打字要多
最后,如果你喜欢把这个功能。。。在函数中:
#/usr/bin/env bash
ip=${1:-1.2.3.4}
ipvalid(){
#设置局部变量
本地ip=${1:-1.2.3.4}
本地IFS=;本地-a=($ip)
#从正则表达式格式测试开始
[[$ip=~^[0-9]+(\[0-9]+){3}$]| |返回1
#四边形的测试值
本地四元
对于{0..3}中的四边形;do
[[“${a[$quad]}”-gt 255]]&返回1
完成
返回0
}
如果有效,则为“$ip”;然后
echo“成功($ip)”
出口0
其他的
echo“失败($ip)”
出口1
fi
有很多方法可以做到这一点。我给你看了几个