Linux Shell脚本之自动修改IP

时间:2021-03-02 16:56:00

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

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

欢迎大家共同交流进步,分享更多的文章!知识在于分享,才会让我们更快的进步!

本文出自 “吴光科-京峰教育Linux培训” 博客,请务必保留此出处http://wgkgood.blog.51cto.com/1192594/1092059