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