shell脚本更改ip地址

7 年前发布在 51cto 博客的一篇文章。

原文链接:https://blog.51cto.com/lushang/997964

shell脚本执行流程如下图:

执行流程.jpg

代码:

#!/bin/sh  
#脚本用途:用来设置IP、子网掩码、默认网关以及DNS  
#用法:sh name.sh [-i ipadress] [-n netmask] [-g gateway] #[-d dns]  
#注意:1.此脚本只能接受设置一个dns值;  
#     2.可以分别指定相应选项进行设置;  
#+++++判断是否有输入参数,如果没有则给出脚本用法并退出+++++  
if [[ $# -lt 1 ]]; then 
    echo "USAGE:`basename $0` [-i ipaderr] [-n netmask] [-g gateway] [-d dnsname]" 
    exit 1  
fi  
#+++++自定义函数:IP地址合理性验证+++++  
#+++此部分代码参考:《编写一个判断IP地址合法性的bash脚本》一文
#原文链接:http://blog.csdn.net/goodpeter/article/details/2612855
 
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!" 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容