当前位置: > shell编程 >

Shell脚本之自动修改IP

时间:2014-04-28 23:49来源:linux.it.net.cn 作者:IT网

作为一名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  

 

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容