Shell脚本实现自动修改IP地址

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/bin/sh
#auto Change ip netmask gateway scripts
#wugk 2012-12-17
cat<< EOF
++++++++自动修改ip和主机名等相关信息+++++++++
ETHCONF=/etc/sysconfig/network-scripts/ifcfg-eth0
HOSTS=/etc/hosts
NETWORK=/etc/sysconfig/network
DIR=/data/backup/`date+%Y%m%d`
NETMASK=255.255.255.0
+++++++++-------------------------+++++++++++
EOF
#Define Path 定义变量,可以根据实际情况修改
  
 ETHCONF=/etc/sysconfig/network-scripts/ifcfg-eth0
 HOSTS=/etc/hosts
 NETWORK=/etc/sysconfig/network
 DIR=/data/backup/`date+%Y%m%d`
 NETMASK=255.255.255.0
  
echo"================================================"
echo
#定义change_ip函数
functionChange_ip ()
{
#判断备份目录是否存在,中括号前后都有空格,!叹号在shell表示相反的意思#
if
 [ ! -d $DIR ];then
  
 mkdir-p $DIR
  
fi
  
 echo"Now Change ip address ,Doing Backup Interface eth0"
 cp$ETHCONF $DIR
  
 grep"dhcp"$ETHCONF
#如下$?用来判断上一次操作的状态,为0,表示上一次操作状态正确或者成功#
if
  
 [ $? -eq0 ];then
#read -p 交互输入变量IPADDR,注冒号后有空格,sed -i 修改配置文件#
 read-p"Please insert ip Address:"IPADDR
 sed-i's/dhcp/static/g'$ETHCONF
#awk -F. 意思是以.号为分隔域,打印前三列#
 echo-e"IPADDR=$IPADDR\nNETMASK=$NETMASK\nGATEWAY=`echo $IPADDR|awk -F. '{print $1"."$2"."$3}'`.254">>$ETHCONF
 echo"This IP address Change success !"
  
else
  
 echo-n"This $ETHCONF is static exist ,please ensure Change Yes or NO":
 readi
  
fi
  
if
 ["$i"=="y"-o"$i"=="yes"];then
 read-p"Please insert ip Address:"IPADDR
  
 count=(`echo$IPADDR|awk-F.'{print $1,$2,$3,$4}'`)
 #定义数组, ${#count[@]}代表获取变量值总个数#
 A=${#count[@]}
 #while条件语句判断,个数是否正确,不正确循环提示输入,也可以用[0-9]来判断ip#
while
  
 ["$A"-ne"4"]
  
do
  
 read-p"Please re Inster ip Address,example 192.168.0.11 ip": IPADDR
 count=(`echo$IPADDR|awk-F.'{print $1,$2,$3,$4}'`)
 A=${#count[@]}
  
done
 #sed -e 可以连续修改多个参数#
 sed-i -e's/^IPADDR/#IPADDR/g'-e's/^NETMASK/#NETMASK/g'-e's/^GATEWAY/#GATEWAY/g'$ETHCONF
 #echo -e \n为连续追加内容,并自动换行#
 echo-e"IPADDR=$IPADDR\nNETMASK=$NETMASK\nGATEWAY=`echo $IPADDR|awk -F. '{print $1"."$2"."$3}'`.254">>$ETHCONF
 echo"This IP address Change success !"
else
 echo"This $ETHCONF static exist,please exit"
 exit$?
  
fi
  
}
  
#定义hosts函数
############function hosts##############
functionChange_hosts ()
{
  
if
  
 [ ! -d $DIR ];then
 mkdir-p $DIR
  
fi
  
 cp$HOSTS $DIR
 read-p"Please insert ip address": IPADDR
  
 host=`echo$IPADDR|sed's/\./-/g'`
 cat$HOSTS |grep127.0.0.1 |grep"$host"
   
if
 [ $? -ne0 ];then
 sed-i"s/127.0.0.1/127.0.0.1 $host/g"$HOSTS
 echo"This hosts change success "
  
else
 echo"This $host IS Exist .........."
  
fi
  
}
  
###########fuction network###############
#定义network函数
functionChange_network ()
{
 if
  
 [ ! -d $DIR ];then
 mkdir-p $DIR
  
 fi
 cp$NETWORK $DIR
 read-p"Please insert ip address": IPADDR
  
 host=`echo$IPADDR|sed's/\./-/g'`
 grep"$host"$NETWORK
  
 if
 [ $? -ne0 ];then
 sed-i"s/^HOSTNAME/#HOSTNAME/g"$NETWORK
 echo"NETWORK=$host">>$NETWORK
  
else
 echo"This $host IS Exist .........."
  
 fi
  
}
  
#PS3一般为菜单提示信息#
 PS3="Please Select ip or hosts Menu":
#select为菜单选择命令,格式为select $var in ..command.. do .... done
 selectiin"Change_ip""Change_hosts""Change_network"
  
do
#case 方式,一般用于多种条件下的判断
case$iin
  Change_ip )
  Change_ip
;;
  Change_hosts )
  Change_hosts
;;
  Change_network )
  Change_network
;;
  *)
  echo
  echo"Please Insert $0: Change_ip(1)|Change_hosts(2)|Change_network(3)"
  echo
;;
esac
  
done

你可能感兴趣的:(Shell脚本实现自动修改IP地址)