Shell脚本实现自动修改IP地址
作为一名LinuxSA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名、ip信息、网关等配置。修改成特定的主机名在维护和管理方面也比较方便。如下脚本用途为:修改ip和主机名等相关信息,可以根据实际需求修改,举一反三!
#!/bin/sh
#autoChangeipnetmaskgatewayscripts
#wugk2012-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
#DefinePath定义变量,可以根据实际情况修改
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"NowChangeipaddress,DoingBackupInterfaceeth0"
cp$ETHCONF$DIR
grep"dhcp"$ETHCONF
#如下$?用来判断上一次操作的状态,为0,表示上一次操作状态正确或者成功#
if
[$?-eq0];then
#read-p交互输入变量IPADDR,注冒号后有空格,sed-i修改配置文件#
read-p"PleaseinsertipAddress:"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"ThisIPaddressChangesuccess!"
else
echo-n"This$ETHCONFisstaticexist,pleaseensureChangeYesorNO":
readi
fi
if
["$i"=="y"-o"$i"=="yes"];then
read-p"PleaseinsertipAddress:"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"PleasereInsteripAddress,example192.168.0.11ip":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"ThisIPaddressChangesuccess!"
else
echo"This$ETHCONFstaticexist,pleaseexit"
exit$?
fi
}
#定义hosts函数
############functionhosts##############
functionChange_hosts()
{
if
[!-d$DIR];then
mkdir-p$DIR
fi
cp$HOSTS$DIR
read-p"Pleaseinsertipaddress":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"Thishostschangesuccess"
else
echo"This$hostISExist.........."
fi
}
###########fuctionnetwork###############
#定义network函数
functionChange_network()
{
if
[!-d$DIR];then
mkdir-p$DIR
fi
cp$NETWORK$DIR
read-p"Pleaseinsertipaddress":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$hostISExist.........."
fi
}
#PS3一般为菜单提示信息#
PS3="PleaseSelectiporhostsMenu":
#select为菜单选择命令,格式为select$varin..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"PleaseInsert$0:Change_ip(1)|Change_hosts(2)|Change_network(3)"
echo
;;
esac
done