#!/bin/bash #2019.7.28 18:52 #This author is DKS #auto modify ip of linux ############################### IP_NAME="ifcfg-ens33" IP_DIR="/etc/sysconfig/network-scripts/" TEMP=$(mktemp -t test.XXXXXX) TEMP1=$(mktemp -t test1.XXXXXX) TEMP2=$(mktemp -t test2.XXXXXX) # cd $IP_DIR if [ ! -d ip_back ];then mkdir ip_back fi #获取备份编号 judge_var(){ VAR=`find ${IP_DIR}ip_back/ -type f -name "ifcfg-ens33*"|awk -F. '{print $2}'|sort |sed -n '$p'|grep -oE "[0-9]{0,3}"` if [ $VAR -ge 1 ];then VAR=$(expr $VAR + 1) else VAR=1 fi IP_BACK="${IP_DIR}ip_back/ifcfg-ens33.back$VAR" ip_back_name="ifcfg-ens33.back$VAR" } # #ip地址备份 ip_back(){ judge_var cp $IP_NAME $IP_BACK dialog --title "备份为" --msgbox "$ip_back_name" 10 25 } # #ip地址状态判断 test_ip_status(){ STATUS=`sed -n '/BOOTPROTO/p' ${IP_NAME}|awk -F= '{print $2}'` dialog --title "当前状态" --msgbox "${STATUS}" 10 20 while [ 1 ] do dialog --inputbox "修改状态为dhcp或static" 10 20 2>$TEMP1 if [ $? -eq 1 ];then BREAK=1 break fi status=`cat $TEMP1` if [[ $status == static ]];then local temp="static" BREAK=0 break elif [[ $status == dhcp ]];then local temp="dhcp" BREAK=0 break else dialog --msgbox "输入错误" 10 20 fi done if [ $BREAK -eq 0 ];then dialog --yesno "您的输入为: $temp " 10 20 if [ $? -eq 0 ];then ip_back sed -i "s/BOOTPROTO=${STATUS}/BOOTPROTO=${temp}/g" $IP_NAME dialog --title "修改后状态" --msgbox "$(cat $IP_NAME)" 23 45 elif [ $? -eq 1 ];then dialog --msgbox "已取消修改" 10 20 fi fi } # #ip地址修改 cat_modify_ip(){ cat >> ${IP_NAME} <<eof IPADDR="$1" NETMASK="255.255.255.0" GATEWAY="192.168.2.1" DNS1="114.114.114.114" eof } modify_ip(){ STATUS=`sed -n '/BOOTPROTO/p' ${IP_NAME}|awk -F= '{print $2}'` dialog --title "当前状态" --msgbox " $STATUS" 10 20 if [[ $STATUS == static ]];then while [ 1 ] do dialog --title "请输入IP:" --inputbox "例:192.168.2.XXX" 10 25 2>$TEMP2 if [ $? -eq 1 ];then break fi ip=$(cat $TEMP2) judge_ip=`echo $ip |grep -E "<([0-9]{1,3}.){3}([0-9]{1,3})>"` if [[ $ip == $judge_ip ]];then local txt=0 dialog --title "您的输入为:" --msgbox " $ip" 10 25 else local txt=1 fi if [ $txt -eq 0 ];then if [ -z `sed -n "/IPADDR/p" $IP_NAME` ];then ip_back cat_modify_ip $ip dialog --title "已修改为" --msgbox "$(cat $IP_NAME)" 25 40 break else ip_back old_ip=`sed -n '/IPADDR/p' $IP_NAME | awk -F= '{print $2}'` sed -i "s/IPADDR=${old_ip}/IPADDR=${ip}/g" $IP_NAME dialog --title "已修改为" --msgbox "$(cat $IP_NAME)" 25 40 break fi elif [ $txt -eq 1 ];then dialog --msgbox "输入错误" 10 20 fi done elif [[ $STATUS == dchp ]];then break fi } # #ip地址回滚 rool_back(){ judge_var VAR=$(expr $VAR - 1) if [ $VAR le 1 ];then VAR=1 fi #获取备份 IP_BACK="${IP_DIR}ip_back/ifcfg-ens33.back$VAR" ip_back_name="ifcfg-ens33.back$VAR" mv $IP_BACK $IP_NAME VAR=$[ $VAR - 1 ] dialog --title "回滚备份" --msgbox "$ip_back_name" 10 25 dialog --title "IP已回改为" --msgbox "$(cat $IP_NAME)" 25 40 } ## #重启网卡 restart_network(){ dialog --title "是否重启当前网络配置" --yesno "$(cat $IP_NAME)" 25 40 if [ $? -eq 0 ];then service network restart &>/dev/null if [ $? -eq 0 ];then dialog --msgbox "重启成功" 10 20 else dialog --msgbox "重启失败" 10 20 fi elif [ $? -eq 1 ];then dialog --msgbox "已取消操作" 10 20 fi } ## ##程序实现 while [ 1 ] do dialog --menu "自动修改服务器IP脚本" 15 30 10 1 "检测IP状态并修改" 2 "修改IP地址" 3 "IP地址回滚" 4 "重启网卡" 0 "退出" 2>$TEMP if [ $? -eq 1 ];then break fi selection=$(cat $TEMP) case $selection in 1) test_ip_status ;; 2) modify_ip ;; 3) rool_back ;; 4) restart_network ;; 0) break ;; *) dialog --msgbox "输入错误" 10 20 esac done rm -r $TEMP 2> /dev/null rm -r $TEMP1 2> /dev/null rm -r $TEMP2 2> /dev/null