例子
代码如下 | 复制代码 |
zj@zj:~/Script/cushell/08.11.04$ cat checkip.sh view plainprint? #!/bin/bash printerr () { echo "incorrect IP format." readip chkip } readip () { read -p "Your IP: " IP } chkip () { echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.' && printerr [ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && printerr for i in ${IP//./ } ; do echo $i | grep -Eq "^0+[^0]" && printerr [ $((10#$i/8)) -gt 31 ] && printerr done } if [ "$1" ]; then IP=$1 else readip fi chkip echo "$IP is good!" |
解释下:
grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.'
[^0-9.]是不是有除了0-9与.之外的字符
^\.|\.$ 以.开头 or 以.结尾
^0*\.|\.\. 以0开头 or 连续两个.
以上三种情况都是错误的哦,所以就printerr
echo -e "${IP//./\n}" | wc -l说实话前面那种替换我也是first time.就是讲.替换为换行,3个点就是4行了哦.不是3个点也就printerr
$((10#$i/8)) -gt 31 这个就是判断是不是<=255的了,当然你也可以自己修改成$i -gt 255
OK解释完毕^_^
代码如下 | 复制代码 |
zj@zj:~/Script/cushell/08.11.04$ ./checkip.sh 1.2.3.4 1.2.3.4 is zj@zj:~/Script/cushell/08.11.04$ ./checkip.sh 01.2.3.4 incorrect IP format. Your IP: a.b.a.d incorrect IP format. Your IP: 266.1.1.1 incorrect IP format. Your IP: 244.255.255.255 244.255.255.255 is |
例子2、使用shell校验IP地址合法性
使用方法:
代码如下 | 复制代码 |
[root@yang python]# bash check_ip.sh IP地址 |
执行结果:返回值0校验合法,非0不合法。
shell代码:
代码如下 | 复制代码 |
[root@yang python]# vi check_ip.sh #!/usr/bin/sh CheckIPAddr() { echo $1|grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null; #IP地址必须为全数字 if [ $? -ne 0 ] then return 1 fi ipaddr=$1 a=`echo $ipaddr|awk -F . '{print $1}'` #以"."分隔,取出每个列的值 b=`echo $ipaddr|awk -F . '{print $2}'` c=`echo $ipaddr|awk -F . '{print $3}'` d=`echo $ipaddr|awk -F . '{print $4}'` for num in $a $b $c $d do if [ $num -gt 255 ] || [ $num -lt 0 ] #每个数值必须在0-255之间 then return 1 fi done return 0 } if [ $# -ne 1 ];then #判断传参数量 echo "Usage: $0 ipaddress." exit else CheckIPAddr $1 fi |
时间: 2024-10-12 23:55:19