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

[[email protected] 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

更多内容请关注:shell-scripts脚本修改IP地址

http://www.jfedu.net/forum.php?mod=viewthread&tid=1776&fromuid=100
(出处: Linux运维培训-京峰Linux教育官网)

脚本运行效果图示:

时间: 2024-10-03 14:05:25

bash-shell-scripts高级脚本配置IP地址的相关文章

windows下脚本配置IP地址

带着笔记本有时候在固定的地方工作,需要用到同一个的Ip地址.换个地方换个Ip,又要重新输一遍. 开始感觉这个过程很繁琐,因为是window工作环境,一开始想到了vbs脚本. 无意中发现了强大的netsh命令.... 下面分两个部分,先介绍netsh的基本用法,然后贴段vbs脚本实现自动配置IP地址功能. netsh常见用法 查看网络配置 netsh interface ip show {选项} 配置接口IP/网关IP netsh interface ip set address "本地连接&qu

【Windows】win10电脑通过bat脚本自动配置IP地址

目录 1.需求描述 2.实现过程 2.1 代码部分 2.2 文件编码 2.3 配置网卡名 2.4 运行脚本 1.需求描述 现在有win10电脑一台,但是由于办公环境需要随时切换内外网,所以经常需要手工配置IP地址.内外需要配置固定IP地址,外网需要配置为自动获取IP地址 2.实现过程 2.1 代码部分 @echo off rem 强制获取管理员权限 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute(&quo

Linux下配置IP地址的几种方式--------CentOS 6.X

Linux配置IP地址 Linux下一切皆文件,要想配置的参数永久有效基本上要修改配置文件.以下主要讲怎么使用ifconfig,route,ip等命令配置IP地址等相关参数并配置相关配置文件使其永久有效.主要使用CentOS 6系列 重启网络服务 从CentOS 6系列开始系统默认使用 /etc/init.d/NetworkManager脚本管理网络服务.但也可使用/etc/init.d/network来管理.NetworkManager不支持网络桥接等高级功能.以下使用实例 NetworkMa

如何配置IP地址及网段,如何测试网络连通,如何通过NUC路径访问

这篇跟大家分享一点知识内容,这一篇总共三个内容.内容一:配置IP地址及网段内容二:测试网络的连通内容三:通过unc路径访问 我们在这之前要准备一个虚拟机然后打开两台win10虚拟客户机(我用的是server服务器跟win10,这并没有差别)具体步骤如下:内容一 我们保证两台虚拟机的网段是同一个网段,在虚拟机的右下角点开小电脑图标,进入配置界面然后选自定义随便选择一个网段(但是两个虚拟机的网段要相同)另一台虚拟机也是一样的配置网段,然后确定配置网段完毕后我们在桌面上点击鼠标右键打开网络图标属性,点

CentOS 7 配置IP地址以及出现的问题排查

当我们新建好一个新的CentOS系统后我们首先需要配置IP 地址,为的就是可以方便远程连接和后续的正常使用!由于CentOS 7更新之后配置和CentOS 6还是有点小区别,让我们开始吧~ 首先进入系统后我们先自动获取一个IP地址: #dhclient 查看获取到的IP地址信息 #ip add  或 #ifconfig 然后我们可以查看一下配置文件 #cat /etc/sysconfig/network-scripts/ifcfg-ens33 当然在这条命令中部分如果不是太方便记(经常练习一下,

Windows无法配置IP地址

今天上班时,数据库突然断了.公司使用的是固定IP地址,第一反应是看IP地址.在"网络和共享中心"中查看IP地址,发现网关没了,赶紧配置上.但还是连接不上外网,通过命令行ipconfig查看发现是这样的 通过命令行配置IP地址后,ipconfig再次查看,只显示"网关",在网上找了很多种方法,最后发现是IP地址可能冲突,更改IP地址问题解决. 一般情况下,IP地址冲突,更改IP地址时会提示的,但不知道为什么办公室的这个不会. 总结:在静态IP地址无法配置时,除了排除本

烂泥:VMWare Workation双网卡配置IP地址

本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天给一个客户做远程项目实施,客户那边的服务器是Windows OS的,我们这边的业务运行需要linux OS,所以就在Windows OS下安装VMWare. 但是在配置VM的IP地址时,遇到了双网卡配置IP地址的问题.宿主机是双网卡,一块网卡连接内网,一块网卡连接外网. 经过摸索终于把在VMWare上VM双网卡配置IP地址的事情搞定了,下面记录大致的配置过程. PS:VM的两块网

RedHat 7 配置IP地址与修改主机名

本文是redhat 7的基础设置,主要是配置IP地址和修改主机名 配置IP地址: 修改网卡配置文件:vi/etc/sysconfig/network-script/ifcfg-enoxxx 修改BOOTPROTO=static,ONBOOT=yes,添加IPADDR=192.168.10.14,PREFIX0=24 重启网络服务:systemctl restart network IP设置生效后可以ssh远程上去,下面是使用SSH远程连接所截的图 查看网络状态:systemctl -l stat

linux配置IP地址

1. ifconfig命令临时配置IP地址 ifconfig命令:查看与配置网络状态命令 如:  ifconfig eht0 192.168.0.200 netmask 255.255.255.0 #临时设置eth0网卡的IP地址与子网掩码 2. setup工具永久配置IP地址 setup是redhat专有的图形界面配置工具,DCHP为*代表自动获取IP地址 3. 修改网络配置文件(以centos为例) 4. 图形界面配置IP地址