例子
代碼如下 |
複製代碼 |
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 |