shell脚本建议执行流程如下图:

 

shell脚本更改ip地址_自动获取ip

  1. #!/bin/sh  
  2. #脚本用途:用来设置IP、子网掩码、默认网关以及DNS  
  3. #用法:sh name.sh [-i ipadress] [-n netmask] [-g gateway] #[-d dns]  
  4. #注意:1.此脚本只能接受设置一个dns值;  
  5. #     2.可以分别指定相应选项进行设置;  
  6. #+++++判断是否有输入参数,如果没有则给出脚本用法并退出+++++  
  7. if [[ $# -lt 1 ]]; then 
  8.     echo "USAGE:`basename $0` [-i ipaderr] [-n netmask] [-g gateway] [-d dnsname]" 
  9.     exit 1  
  10. fi  
  11. #+++++自定义函数:IP地址合理性验证+++++  
  12. #+++此部分代码参考:《编写一个判断IP地址合法性的bash脚本》一文
    • function valid_ip()  
    •     {  
    •         local ip=$1  
    •         local stat=1  
    •         if [[ $ip =~ '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ]]; then 
    •         OIFS=$IFS  
    •         IFS='.' 
    •         ip=($ip)  
    •         IFS=$OIFS  
    •         [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]  
    •         stat=$?  
    •         fi  
    •         return $stat  
    •     }  
    •  

      #+++++判断选项及参数类型是否正确+++++  
    • for i in $(seq 1 $#)  
    • do  
    •     if [ $(($i%2)) == 0 ];then 
    •      args=$@  
    •      ip=`echo $args|cut -d" " -f $i`  
    •      if ! $(valid_ip $ip); then echo "ERROR:ipaddress $ip invalid" && exit;fi  
    •     else 
    •      args=$@  
    •      opt=`echo $args|cut -d" " -f $i`  
    •      if [[ "$opt" != '-i' && "$opt" != '-n' && "$opt" != '-g' && "$opt" != '-d' ]];then   
    •          echo "ERROR:  Option \"$opt\" does not exist " && exit  
    •      fi  
    •     fi  
    • done  
    • #+++++getopts分析选项及参数+++++     
    • while getopts :i:n:g:d:: name 
    • do  
    •     case $name in 
    •     "i")  
    •         ipadd=$OPTARG  
    •     ;;   
    •     "n")  
    •         netmask=$OPTARG  
    •     ;;  
    •     "g")  
    •         gateway=$OPTARG  
    •     ;;  
    •     "d")  
    •         dns=$OPTARG  
    •     ;;  
    •     "?")  
    •         echo "ERROR:  $OPTARG  not exist";exit  
    •     ;;  
    •     ":")   
    •         echo "ERROR:  -$OPTARG Requires an argument ";exit  
    •     ;;  
    •     *) echo "ERROR:  Unknow option" 
    •     ;;  
    •     esac  
    • done  
    • #+++++定义一些变量+++++  
    • ifcfg=/etc/sysconfig/network-scripts/ifcfg-eth0  
    • mac=`grep -i HWADDR $ifcfg|awk -F "=" '{print $2}'`  
    • resolv=/etc/resolv.conf  
    • network=/etc/sysconfig/network  
    • #自定义设置IP函数:  
    • function set_ip()  
    • {  
    •     cp -r $ifcfg ${ifcfg}.bak  
    •     echo -ne "DEVICE=eth0  
    •     BOOTPROTO=static 
    •     HWADDR=$mac  
    •     IPADDR=$ipadd  
    •     NETMASK=$netmask  
    •     ONBOOT=yes  
    •     " > $ifcfg  
    •     echo "IPaddress set Success!" 
    • }  
    • #+++++自定义设置网关函数+++++  
    • function set_gw()  
    • {  
    •     cp -r $network ${network}.bak  
    •     echo -ne "NETWORKING=yes  
    •     NETWORKING_IPV6=no 
    •     HOSTNAME=`hostname`  
    •     GATEWAY=$gateway  
    •     " > $network  
    •     echo "Netmask set Success!" 
    • }  
    • #+++++自定义设置dns函数+++++  
    • function set_dns()  
    • {  
    •     cp -r $resolv ${resolv}.bak  
    •     echo -e "nameserver $dns" > $resolv  
    •     echo "DNS set Success!" 
    • }  
    • #+++++++++++++++++++++++++++++++++++++++++++++++  
    • #1.对脚本选项进行分析,是否有指定ip地址?如果没有指定ip地址选项则#保持当前ip地址不变,如果当前并未设置ip地址,则提示必须指定ip地址#选项并退出脚本;  
    • #2.同上对子网掩码进行判断;  
    • #3.同上对默认网关进行判断;  
    • #+++++++++++++++++++++++++++++++++++++++++++++++  
    • if [ ! $ipadd ];then 
    •     ipadd=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`  
    •     if [ ! $ipadd ];then 
    •      echo "There are currently no ip,Please use '-i' option specified IPaddress" 
    •     fi  
    • fi  
    • if [ ! $netmask ];then 
    •     echo "Use the current netmask" 
    •     netmask=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $4}'|tr -d "Mask:"`  
    •     if [ ! $netmask ];then 
    •      echo "The current netmask does not exist Re-run the specified '-n' option or Use the default netmask:255.255.255.0" 
    •      netmask="255.255.255.0" 
    •      echo "IP set:$ipadd NETMASK set:$netmask" 
    •     fi  
    • else 
    •     echo "IP set:$ipadd NETMASK set:$netmask" 
    • fi  
    • if [ ! $gateway ];then 
    •     echo "Use the current gateway" 
    •     gateway=`route|grep default|awk '{print $2}'`  
    •     if [ ! $gateway ];then 
    •      gateway=`echo $ipadd|cut -d. -f1-3`  
    •      gateway=${gateway}.1  
    •      echo "Using the default gateway $gateway " 
    •     fi  
    • else 
    •     echo "Gateway set:$gateway" 
    • fi  
    • #+++++判断是否指定设置dns选项,若指定则修改dns,未指定则不修改;  
    • if [ $dns ];then 
    •     echo "DNS set:$dns" 
    •     set_dns  
    • fi  
    • #+++++设置ip地址及子网掩码+++++  
    • set_ip  
    • #++++设置默认网关+++++  
    • set_gw  
    • #+++++重启网络服务+++++  
    • service network restart >/dev/null 
    • #+++++输出设置的ip地址+++++  
    • echo "IPADDRESS:$ipadd" 
    • #+++++输出设置的子网掩码+++++  
    • echo "NETMASK:$netmask" 
    • #+++++输出设置的默认网关+++++  
    • echo "GATEWAY:$gateway" 
    • #+++++输出设置OK信息+++++  
    • echo "Set OK!" 
    •