shell脚本修改主机IP地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本修改主机IP地址相关的知识,希望对你有一定的参考价值。

#!/bin/bash
#Auto modify ip and hostname

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
NETMASK
GATEWAY
)

#判断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地址
rm -rf ${TMP_TXT}
return 0
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 "33[31m
你输入了错误的${IP_ARRAY[a]}值:${IP_ADDRS} ====>>>>33[0m" 
    read -p "重新输入${IP_ARRAY[a]},请输入:" IP_ADDRS
    judge_ip "${IP_ADDRS}";
    i=`echo $?`
done

}

#判断网卡配置文件,存在就备份,不存在则新建一个空白文件
function chang_ip(){
if [ -f ${IP_CONFIG} ];then
cat ${IP_CONFIG}
cp ${IP_CONFIG} ${IP_CONFIG}.bak
echo -e "33[32m下面将修改IP...33[0m"
rm -rf ${IP_CONFIG} && touch ${IP_CONFIG};
#把部分基本信息导入到网卡配置文件内
cat >${IP_CONFIG} <<EOF
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
EOF
##########################################
#循环五次,共调用函数五次,分别获取需要设置的所有数据
for ((a=0;a<=2;a++))
do
read_right_IP;
echo -e "33[32m ${IP_ARRAY[a]}=${IP_ADDRS}33[0m"
#把内容追加到网卡配置文件的最后
echo -e "${IP_ARRAY[a]}=${IP_ADDRS}" >> ${IP_CONFIG}
done
echo -e "33[32m +++++++设置的IP相关信息如下+++++++33[1m"
cat ${IP_CONFIG};
echo -e "33[32m ++++++++++++++++++++++++++++++++++33[0m"
else
echo -e "33[31m网卡配置文件:${IP_CONFIG}不存在,请检查系统是否被破坏...33[0m"
fi
}

##########################################
chang_ip
if [ "$?" -eq 0 ];then
echo -e "33[32m修改IP success ...33[0m"
echo -e "33[32m删除70-persistent-cd.rules 文件...33[0m"
rm -f /etc/udev/rules.d/70-persistent-cd.rules
echo -e "33[32m重启service network restart网卡...33[0m"
service network restart
ping -c 3 10.1.2.254
echo -e "33[32m history -C ...33[0m"
history -c
echo -e "33[32m clean /var/log/messages ...33[0m"
echo "" >/root/.bash_history
echo "" >/var/log/messages
echo -e "33[32m delete change_ip.sh 33[0m"
rm -f /root/change_ip.sh

else
echo -e "33[31m失败!请检查IP配置文件...33[0m"
fi

以上是关于shell脚本修改主机IP地址的主要内容,如果未能解决你的问题,请参考以下文章

使用Shell批量修改Linux服务器的IP --- shell百例

使用Shell批量修改Linux服务器的IP --- shell百例

Shell脚本 使用sed流编辑器一键修改CentOS网卡IP地址

shell 脚本创建虚拟机 并配置网卡ip地址(两个脚本)

Shell扫描所在网段存活主机

编写MAC记录与端口扫描脚本的shell脚本