记录一开机网络配置检测脚本(shell)

由于上层应用的网络配置功能存在bug,以及用户的不留心,导致设备网络配置失败,网卡起不来了。

完善了之前写的开机网络配置脚本,新增了网络信息合法性检测,记录一下。

#!/bin/sh

#filepath="/etc/init.d/net.conf"

netdev="eth0"
dhcp=0
ipaddr="192.168.100.88"
netmask="255.255.255.0"
gateway="192.168.100.1"
fdns="192.168.100.1"
macaddr="D4:E0:8E:DB:18:06"
netconf_path="/data/net.conf"
state=1
flag=0

default_netconf() {
    echo -n -e "dhcp=0\n" > ${netconf_path}
    echo -n -e "ipaddr=192.168.100.88\n" >> ${netconf_path}
    echo -n -e "netmask=255.255.255.0\n" >> ${netconf_path}
    echo -n -e "gateway=192.168.100.1\n" >> ${netconf_path}
    echo -n -e "fdns=192.168.100.1\n" >> ${netconf_path}
    echo -n -e "macaddr=D4:E0:8E:DB:18:06\n" >> ${netconf_path}
    chmod 755 ${netconf_path}
}

check_ip()
{
    echo $1 | grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null  
    if [ $? = 1 ]; then
        return 0;
    else
        a=`echo $1 | awk -F. '{print $1}'`
        b=`echo $1 | awk -F. '{print $2}'`
        c=`echo $1 | awk -F. '{print $3}'`
        d=`echo $1 | awk -F. '{print $4}'`
        #echo $a $b $c $d
        
        if [ ${a} = 0 ] || [ ${d} = 0 ]; then
            return 0;
        fi

        for loop in $a $b $c $d
        do
            if [ $loop -ge 255 ] || [ $loop -lt 0 ]; then
                return 0;
            fi
        done
    fi

    return 1;
}

check_mask()
{
    #echo $1 | grep "^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$" > /dev/null
    echo $1 | grep "^\(254\|252\|248\|240\|224\|192\|128\|0\)\.0\.0\.0\|255\.\(254\|252\|248\|240\|224\|192\|128\|0\)\.0\.0\|255\.255\.\(254\|252\|248\|240\|224\|192\|128\|0\)\.0\|255\.255\.255\.\(254\|252\|248\|240\|224\|192\|128\|0\)$" > /dev/null
    if [ $? = 1 ]; then
        return 0;
    else
        return 1;
    fi
}

check_mac_addr()
{
    #if echo $1 | grep -qiP "^([\dA-F]{2}:){5}[\dA-F]{2}$"; then
    echo $1 | grep "^[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}$" > /dev/null
    if [ $? = 1 ]; then
        return 0;
    else
        return 1;
    fi
}

check_ip_gateway()
{
    ip_sbit0=`echo $1 | awk -F. '{print $1}'`
    ip_sbit1=`echo $1 | awk -F. '{print $2}'`
    ip_sbit2=`echo $1 | awk -F. '{print $3}'`
    ip_sbit3=`echo $1 | awk -F. '{print $4}'`
    #echo ${ip_sbit0} ${ip_sbit1} ${ip_sbit2} ${ip_sbit3}

    mask_sbit0=`echo $2 | awk -F. '{print $1}'`
    mask_sbit1=`echo $2 | awk -F. '{print $2}'`
    mask_sbit2=`echo $2 | awk -F. '{print $3}'`
    mask_sbit3=`echo $2 | awk -F. '{print $4}'`
    #echo ${mask_sbit0} ${mask_sbit1} ${mask_sbit2} ${mask_sbit3}

    gw_sbit0=`echo $3 | awk -F. '{print $1}'`
    gw_sbit1=`echo $3 | awk -F. '{print $2}'`
    gw_sbit2=`echo $3 | awk -F. '{print $3}'`
    gw_sbit3=`echo $3 | awk -F. '{print $4}'`
    #echo ${gw_sbit0} ${gw_sbit1} ${gw_sbit2} ${gw_sbit3}
    
    ip_sbit0=$((${ip_sbit0} & ${mask_sbit0}))    
    ip_sbit1=$((${ip_sbit1} & ${mask_sbit1}))    
    ip_sbit2=$((${ip_sbit2} & ${mask_sbit2}))    
    ip_sbit3=$((${ip_sbit3} & ${mask_sbit3}))    
    
    gw_sbit0=$((${gw_sbit0} & ${mask_sbit0}))    
    gw_sbit1=$((${gw_sbit1} & ${mask_sbit1}))    
    gw_sbit2=$((${gw_sbit2} & ${mask_sbit2}))    
    gw_sbit3=$((${gw_sbit3} & ${mask_sbit3}))    

    #echo ${ip_sbit0} ${ip_sbit1} ${ip_sbit2} ${ip_sbit3}
    #echo ${gw_sbit0} ${gw_sbit1} ${gw_sbit2} ${gw_sbit3}
    
    if [ ${ip_sbit0} = ${gw_sbit0} ] && [ ${ip_sbit1} = ${gw_sbit1} ] && [ ${ip_sbit2} = ${gw_sbit2} ] && [ ${ip_sbit3} = ${gw_sbit3} ]; then
        return 1;
    else
        return 0;
    fi
}

if [ "$1" ];then
    netconf_path=$1
fi

if [ -f ${netconf_path} ];then
    echo "exist ${netconf_path}"
else
    echo "not exitst ${netconf_path}"
    echo "use default netconf"
    default_netconf
fi

for ipinfo in `cat ${netconf_path}`
do
    case "${ipinfo}" in
    dhcp*)
        dhcp=`echo ${ipinfo} | cut -d = -f 2`
        if [ ${dhcp} != "0" ] && [ ${dhcp} != "1" ]; then
            echo ${dhcp}
            echo "dhcp format error"
            dhcp="0"
            state=0
        fi
        
        let flag+=1
        ;;
    fdns*)
        fdns=`echo ${ipinfo} | cut -d = -f 2`
        check_ip ${fdns}
        ret=$?
        if [ ${ret} = 0 ]; then
            echo ${fdns}
            echo "fdns format error"
            fdns="192.168.100.1"
            state=0
        fi
        let flag+=1
        ;;
    ipaddr*)
        ipaddr=`echo ${ipinfo} | cut -d = -f 2`
        check_ip ${ipaddr}
        ret=$?
        if [ ${ret} = 0 ]; then
            echo ${ipaddr}
            echo "ipaddr format error"
            ipaddr="192.168.100.88"
            state=0
        fi
        d=`echo ${ipaddr} | awk -F. '{print $4}'`
        if [ ${d} = 0 ]; then
            echo ${ipaddr}
            echo "ipaddr format error"
            ipaddr="192.168.100.88"
            state=0
        fi
        let flag+=1
        #echo "ip      = "${ipaddr}
        ;;    
    netmask*)
        netmask=`echo ${ipinfo} | cut -d = -f 2`
        check_mask ${netmask}
        ret=$?
        if [ ${ret} = 0 ]; then
            echo ${netmask}
            echo "netmask format error"
            netmask="255.255.255.0"
            state=0
        fi
        let flag+=1
        #echo "netmask = "${netmask}
        ;;    
    gateway*)
        gateway=`echo ${ipinfo} | cut -d = -f 2`
        check_ip ${gateway}
        ret=$?
        if [ ${ret} = 0 ]; then
            echo ${gateway}
            echo "gateway format error"
            gateway="192.168.100.1"
            state=0
        fi
        let flag+=1
        #echo "gateway = "${gateway}
        ;;    
    macaddr*)
        macaddr=`echo ${ipinfo} | cut -d = -f 2`
        check_mac_addr ${macaddr}
        ret=$?
        if [ ${ret} = 0 ]; then
            echo ${macaddr}
            echo "macaddr format error"
            macaddr="D4:E0:8E:DB:18:06"
            state=0
        fi
        let flag+=1
        #echo "macaddr = "${macaddr}
        ;;    
    esac
done

check_ip_gateway ${ipaddr} ${netmask} ${gateway}
ret=$?
if [ ${ret} = 0 ]; then
    echo "ipaddr:"${ipaddr}
    echo "netmask:"${netmask}
    echo "gateway:"${gateway}
    echo "ipaddr_gateway check failed"
    ipaddr="192.168.100.88"
    netmask="255.255.255.0"
    gateway="192.168.100.1"
    state=0
fi

#echo "flag = "${flag}

if [ ${state} = 0 ] || [ ${flag} != 6 ]; then
    echo -n -e "dhcp=${dhcp}\n" > ${netconf_path}
    echo -n -e "ipaddr=${ipaddr}\n" >> ${netconf_path}
    echo -n -e "netmask=${netmask}\n" >> ${netconf_path}
    echo -n -e "gateway=${gateway}\n" >> ${netconf_path}
    echo -n -e "fdns=${fdns}\n" >> ${netconf_path}
    echo -n -e "macaddr=${macaddr}\n" >> ${netconf_path}
    chmod 755 ${netconf_path}

    echo "write netinfo success"
fi

echo "ip      = "${ipaddr}
echo "netmask = "${netmask}
echo "gateway = "${gateway}
echo "macaddr = "${macaddr}

#check_ip_gateway "192.168.10.238" "255.255.255.0" "192.168.100.1"
#echo $?

#set network
ifconfig lo up
ifconfig ${netdev} hw ether ${macaddr}
ifconfig ${netdev} up
ifconfig ${netdev} ${ipaddr} netmask ${netmask}
route add default gw "${gateway}" dev ${netdev}
echo "init ${netdev} finish"





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值