Shell脚本实现自动修改服务器IP

小柒博客 Shell379.2K3字数 3558阅读11分51秒阅读模式

这篇文章主要介绍了Shell脚本实现自动修改IP地址,本文直接给出实现代码,并在代码中标注了注释,需要的朋友可以参考下

作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名、ip信息、网关等配置。修改成特定的主机名在维护和管理方面也比较方便。

如下脚本用途为:利用SHELL脚本实现自动修改服务器IP

#脚本内容如下

脚本一

#!/bin/bash
#Date:2017-5-20 13:14:00
#Author blog:
#	https://www.yangxingzhen.com
#Author site:
#	https://www.yangxingzhen.com/sitemap.html
#Author mirrors site:
#	https://mirrors.yangxingzhen.com
#About the Author
#	BY:、、、小柒
#	QQ:675583110
#	Mail:675583110@qq.com
#Auto Modify Server IPADDR
#Version: 1.3     

source /etc/init.d/functions
IP_ADDR=$1
#Define Path 定义变量,可以根据实际情况修改 
Array=(
	[0]=`ifconfig |awk '/cast/ {print $2}'|sed 's/addr://'`
	[1]=/data/backup/`date +%F`
	[2]=`ip route |awk '/default/ {print $3}'`
	[3]=/etc/sysconfig/network-scripts
	[4]=`grep -wc dhcp ${Array[3]}/ifcfg-ens33`
)

#定义check_ip函数体
function check_ip (){
	#严格判断IP正确性
	#if echo ${IP_ADDR} | egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}$';then
	if [[ ${IP_ADDR} =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]];then
	count=(`echo ${IP_ADDR}|awk -F. '{print $1,$2,$3,$4}'`)
		IP_V1=${count[0]}
		IP_V2=${count[1]}
		IP_V3=${count[2]}
		IP_V4=${count[3]}
	for i in $IP_V1 $IP_V2 $IP_V3 $IP_V4
	do
		#判断IP输入数字大小为小于或等于255,大于0,首IP不能为0
		if [[ $i =~ ^0[0-9]{1,2}$ ]];then
			echo -e "\033[32m IP $IPADDR not available. \033[0m"
                        return 1
		fi
		if [ $i -lt 255 -a $i -ge 0 ];then
			echo -e "\033[32m IP $IPADDR available. \033[0m" >/dev/null 2>&1
		else
			echo -e "\033[32m IP $IPADDR not available. \033[0m"
			return 1
		fi
		if [ $IP_V1 -eq 0 ];then
			echo -e "\033[32m IP $IPADDR not available. \033[0m"
			return 1
		fi 
	done
	else
		echo -e "\033[33m IP format error,Please Enter IP. \033[0m"
		return 1
	fi
}

#while条件语句判断,输入IP是否符合,不符合循环提示输入
while true;
do
#read一般为菜单提示信息
read -p "Please Enter Server IP: " IPADDR
check_ip	
if [ $? -eq 0 ];then
   break
fi
done

#判断备份目录是否存在,中括号前后都有空格,!叹号在shell表示相反的意思
if [ ! -d ${Array[1]} ];then
	mkdir -p ${Array[1]}
fi
\cp ${Array[3]}/ifcfg-ens33 ${Array[1]}

#判断网络状态为静态还是动态
if [ ${Array[4]} -eq 1 ];then
sed -i 's/dhcp/static/g;s/ONBOOT=no/ONBOOT=yes/g' ${Array[3]}/ifcfg-ens33
cat >>${Array[3]} <<EOF
IPADDR=${IPADDR}
NETMASK=${Array[0]}
GATEWAY=${Array[2]}
EOF
	systemctl restart network
else
	read -p "The IP is Static ipaddress,Please ensure change server IP address,yes|y or no? " INPUT
	if [ "$INPUT" == "yes" -o "$INPUT" == "y" ];then
		sed -i "s/IPADDR=.*/IPADDR=${IP_ADDR}/" ${Array[3]}/ifcfg-ens33
		systemctl restart network
	else
		exit 0
	fi
fi

脚本二

#!/bin/bash
#2017-12-11 14:26:44
#by author yangxz
#Auto modify  Server IP
#Define Path 定义变量,可以根据实际情况修改
NETMASK="255.255.255.0"
GATEWAY="192.168.60.1"
BACK_DATA="/data/bak"
ETH_FILE="/etc/sysconfig/network-scripts/ifcfg-eth0"
ETH_STATUS=`grep dhcp /etc/sysconfig/network-scripts/ifcfg-eth0 | wc -l`

#定义check_ip函数
function check_ip () {
    IP_ADDR=$1
    #严格判断IP正确性
    if echo $IP_ADDR | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$';then
IP_V1=`echo $IP_ADDR | cut -d. -f1`
IP_V2=`echo $IP_ADDR | cut -d. -f2`
IP_V3=`echo $IP_ADDR | cut -d. -f3`
IP_V4=`echo $IP_ADDR | cut -d. -f4`
    for i in $IP_V1 $IP_V2 $IP_V3 $IP_V4
    do
        #判断IP输入数字大小为小于或等于255,大于0
        if [ $i -lt 255 -a $i -ge 0 ];then
            echo -e "\033[32m IP $IP_ADDR available. \033[0m" >/dev/null
        else
            echo -e "\033[32m IP $IP_ADDR not available. \033[0m"
            return 1
        fi
        if [ $IP_V1 -eq 0 ];then
            echo -e "\033[32m IP $IP_ADDR not available. \033[0m"
            return 1
        fi
    done
    else
    echo -e "\033[33m IP format error,Please Enter IP. \033[0m"
    return 1
    fi
}
#while条件语句判断,输入IP是否符合,不符合循环提示输入
while true;
do
#read一般为菜单提示信息
read -p "Please Enter Correct IP:" IP
check_ip $IP
if [ $? -eq 0 ];then
break
fi
done
#判断备份目录是否存在,中括号前后都有空格,!叹号在shell表示相反的意思
if [ ! -d $BACK_DATA ];then
mkdir -p $BACK_DATA
fi
cp $ETH_FILE $BACK_DATA
#判断网络状态为静态还是动态
if [ $ETH_STATUS -eq 1 ];then
sed -i 's/dhcp/static/' $ETH_FILE
cat >> $ETH_FILE << EOF
IPADDR=$IP_ADDR
NETMASK=$NETMASK
GATEWAY=$GATEWAY
EOF
else
sed -i 's/IPADDR=.*/IPADDR='$IP_ADDR'/' $ETH_FILE
fi
service network restart

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
Wechat
微信扫一扫,加我!
weinxin
微信公众号
微信扫一扫,关注我!
weinxin
Shell最后更新:2024-1-24
小柒博客
  • 本文由 小柒博客 发表于 2017年12月14日08:53:35
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.com/582.html
评论  3  访客  1  作者  2
    • 运维老司机
      运维老司机 6

      亲测,写的不错,感谢博主 :razz:

      • 小柒博客
        小柒博客

        不错

      匿名

      发表评论

      匿名网友
      :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

      取消

      拖动滑块以完成验证