设为首页 收藏本站
查看: 1233|回复: 0

bash-shell-scripts高级脚本配置IP地址

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-6 08:58:12 | 显示全部楼层 |阅读模式
[iyunv@kongxl shell]# cat mod_ip_hostname.sh
#!/bin/bash
#Auto modify ip and hostname
#by colin on 2015-05-07

IP_CONFIG='/etc/sysconfig/network-scripts/ifcfg-eth0'
HOSTNAME_CONFIG='/etc/sysconfig/network'
HOSTS_CONFIG='/etc/hosts'
#定义一个IP主要内容数组
a=0  #定义变量a为数组的下标,动态使用的时候调用IP_ARRAY[a]
IP_ARRAY=(
IPADDR
NATMASK
GATEWAY
dns1
dns2
)

#判断IP是否符合标准规则
function judge_ip(){
        #这里local $1出错,用2>/dev/null屏蔽掉错误,暂未发现影响输出结果
        local $1 2>/dev/null
        TMP_TXT=/tmp/iptmp.txt
        echo $1 > ${TMP_TXT}
        IP_ADDR=`grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' ${TMP_TXT}`
        #判断有没有符合***.***.***.***规则的IP
        if [ ! -z "${IP_ADDR}" ];then
                local j=0;
                #通过循环来检测每个点之前的数值是否符合要求
                for ((i=1;i<=4;i++))
                do
                        local IP_NUM=`echo "${IP_ADDR}" |awk -F. "{print $"$i"}"`
                        #判断IP_NUM是否在0与255之间
                        if [ "${IP_NUM}" -ge 0 -a "${IP_NUM}" -le 255 ];then
                                ((j++));
                        else
                                return 1
                        fi
                done
                #通过j的值来确定是否继续匹配规则,循环四次,若都正确j=4.
                if [ "$j" -eq 4 ];then
                        #确认是否为自己想要输入的IP地址
            read -n 1 -p "输入${IP_ARRAY[a]}的值是${IP_ADDR},确认输入:Y|y;重新输入:R|r:" OK
            case ${OK} in
                        Y|y) rm -rf ${TMP_TXT} ; return 0;;
                R|r) return 1;;
                *) return 1;;
            esac
                else
                        return 1
                fi
        else
                return 1
        fi
}
#取得正确的IP值
#通过调用函数judge_ip,变量IP_ADDR的最终值就是正确的
function read_right_IP(){
        read -p "请输入${IP_ARRAY[a]}的值:" IP_ADDRS
#       IP_ADDRS=""
    judge_ip "${IP_ADDRS}";
    i=`echo $?`
    #循环直到输入正确的IP为止
    until [ "$i" -eq 0 ];do
        echo -e "\033[31m\n你输入了错误的${IP_ARRAY[a]}值:${IP_ADDRS} ====>>>>\033[0m"
        read -p "重新输入${IP_ARRAY[a]},请输入:" IP_ADDRS
        judge_ip "${IP_ADDRS}";
        i=`echo $?`
    done
}
#判断网卡配置文件,存在就备份,不存在则新建一个空白文件
function chang_ip(){
        if [ -f ${IP_CONFIG} ];then
                cp ${IP_CONFIG} ${IP_CONFIG}.bak
                #网卡的MAC地址
                HW_ADDR=`grep 'HWADDR' ${IP_CONFIG}`
                #IP配置状态
                DHCP_STATUS=`grep 'BOOTPROTO' ${IP_CONFIG} |awk -F= '{print toupper($2)}'`
                #如果BOOTPROTO的值是DHCP,就继续设置IP,否则退出呢
                if [ "${DHCP_STATUS}" = 'DHCP' ];then
                        echo -e "\033[32mIP获取方式为:${DHCP_STATUS},下面将修改为静态IP...\033[0m"
                        rm -rf ${IP_CONFIG} && touch ${IP_CONFIG};
#把部分基本信息导入到网卡配置文件内
cat >${IP_CONFIG} <<EOF
DEVICE=eth0
HWADDR
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
EOF
##########################################
                        #把原来MAC地址写进去
                        sed -i "/HWADDR/s/HWADDR/${HW_ADDR}/g" ${IP_CONFIG}
                        #循环五次,共调用函数五次,分别获取需要设置的所有数据
                        for ((a=0;a<=4;a++))
                        do
                                read_right_IP;
                                echo -e "\033[32m\n${IP_ARRAY[a]}=${IP_ADDRS}\033[0m"
                                #把内容追加到网卡配置文件的最后
                                echo -e "${IP_ARRAY[a]}=${IP_ADDRS}" >> ${IP_CONFIG}
                        done
                        echo -e "\033[32m\n+++++++设置的IP相关信息如下+++++++\033[1m"
                        cat ${IP_CONFIG};
                        echo -e "\033[32m\n++++++++++++++++++++++++++++++++++\033[0m"
                else
                        echo -e "\033[32m系统IP已经是:${DHCP_STATUS},无须修改...\033[0m"
                fi
        else
                echo -e "\033[31m网卡配置文件:${IP_CONFIG}不存在,请检查系统是否被破坏...\033[0m"
        fi
}
#脚本选择菜单
menu=(
        chang_ip_config
        chang_hostname_config
        chang_hosts_confg
        exit_menu
        help_menu
)
PS3="Please select menu will running to do (Need help,Please input: 5 ): "
select i in ${menu[@]}
do
        case $i in
                ${menu[0]})
                        chang_ip
                        if [ "$?" -eq 0 ];then
                                echo -e "\033[32m修改IP为静态获取成功...\033[0m"
                        else
                                echo -e "\033[31m请检查IP是否为静态获取...\033[0m"
                        fi
                ;;
                ${menu[1]}) exit ;;
                ${menu[2]}) exit ;;
                ${menu[3]}) exit ;;
                ${menu[4]})
                        echo -e "\033[32m=========帮助菜单内容如下==========\033[0m"

                        for ((i=0;i<"${#menu[@]}";i++))
                        do
                                echo -e "\033[33m `expr $i + 1`) ${menu[i]} \033[0m"
                        done
                ;;
        esac
done



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-240027-1-1.html 上篇帖子: bash-scripts 用脚本添加恶意访问IP到防火规则里 下篇帖子: shell-scripts通过yum搭建LAMP和mysql主从 IP地址
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表