前提:
1、本脚本基本基于网上流传的版本,但是做了优化。
2、现在可以检测:
3、为了好区分,输出中添加颜色
10.10.10.10 合格
10.10.10.1000 不合格
0.10.10.10/32 不合格
10.00.10.10 不合格
10.000.10.10 不合格
脚本如下
[root@node1 ~]# cat check_ip.sh
#!/bin/bash
set -e
function check_ip()
{
# 去掉可能的/24 /32
IP=$(echo $1|cut -d "/" -f 1)
# 保证格式合格
if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
# 保证首个数字大于1
res1=$(echo $IP|awk -F . '$1>=1&&$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if [ "X${res1}" == "X" ]; then
echo -e "\033[41;30m IP $IP not available! \033[0m"
return 1
fi
# 保证不出现01这种数字
res2=$(echo $IP |awk -F . '{for(i=1;i<=NF;i++){if($i~"^0" && $i !=0){print $i}}}')
if [ "X$res2" != "X" ];then
echo -e "\033[41;30m IP $IP not available! \033[0m"
return 1
fi
# 保证不出现00/000这种
res3=$(echo $IP |awk -F . '{for(i=1;i<=NF;i++){if($i=="00"||$i=="000"){print $i}}}')
if [ "X$res3" != "X" ];then
echo -e "\033[41;30m IP $IP not available! \033[0m"
return 1
else
echo -e "\033[42;30m IP:$IP is available! \033[0m"
fi
else
echo -e "\033[43;30m IP:$IP format error! \033[0m"
return 1
fi
}
check_ip $1
测试结果
[root@node1 ~]# sh check_ip.sh 10.10.10.10
IP:10.10.10.10 is available!
[root@node1 ~]# sh check_ip.sh 10.10.10.1000
IP:10.10.10.1000 format error!
[root@node1 ~]# sh check_ip.sh 0.10.10.10/32
IP 0.10.10.10 not available!
[root@node1 ~]# sh check_ip.sh 10.00.10.10
IP 10.00.10.10 not available!
[root@node1 ~]# sh check_ip.sh 10.000.10.10
IP 10.000.10.10 not available!