Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 2162|回复: 4

shell-scripts脚本修改IP地址

[复制链接]

22

主题

69

帖子

2171

积分

金牌会员

Rank: 6Rank: 6

积分
2171
发表于 2015-5-8 15:14:24 | 显示全部楼层 |阅读模式
本帖最后由 kongzi68 于 2015-5-10 09:50 编辑
  1. [root@kongxl shell]# cat mod_ip_hostname.sh
  2. #!/bin/bash
  3. #Auto modify ip and hostname
  4. #by colin on 2015-05-07

  5. IP_CONFIG='/etc/sysconfig/network-scripts/ifcfg-eth0'
  6. HOSTNAME_CONFIG='/etc/sysconfig/network'
  7. HOSTS_CONFIG='/etc/hosts'
  8. #定义一个IP主要内容数组
  9. a=0  #定义变量a为数组的下标,动态使用的时候调用IP_ARRAY[a]
  10. IP_ARRAY=(
  11. IPADDR
  12. NATMASK
  13. GATEWAY
  14. dns1
  15. dns2
  16. )

  17. #判断IP是否符合标准规则
  18. function judge_ip(){
  19.         #这里local $1出错,用2>/dev/null屏蔽掉错误,暂未发现影响输出结果
  20.         local $1 2>/dev/null
  21.         TMP_TXT=/tmp/iptmp.txt
  22.         echo $1 > ${TMP_TXT}
  23.         IP_ADDR=`grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' ${TMP_TXT}`
  24.         #判断有没有符合***.***.***.***规则的IP
  25.         if [ ! -z "${IP_ADDR}" ];then
  26.                 local j=0;
  27.                 #通过循环来检测每个点之前的数值是否符合要求
  28.                 for ((i=1;i<=4;i++))
  29.                 do
  30.                         local IP_NUM=`echo "${IP_ADDR}" |awk -F. "{print [        DISCUZ_CODE_0        ]quot;$i"}"`
  31.                         #判断IP_NUM是否在0与255之间
  32.                         if [ "${IP_NUM}" -ge 0 -a "${IP_NUM}" -le 255 ];then
  33.                                 ((j++));
  34.                         else
  35.                                 return 1
  36.                         fi
  37.                 done
  38.                 #通过j的值来确定是否继续匹配规则,循环四次,若都正确j=4.
  39.                 if [ "$j" -eq 4 ];then
  40.                         #确认是否为自己想要输入的IP地址
  41.             read -n 1 -p "输入${IP_ARRAY[a]}的值是${IP_ADDR},确认输入:Y|y;重新输入:R|r:" OK
  42.             case ${OK} in
  43.                         Y|y) rm -rf ${TMP_TXT} ; return 0;;
  44.                 R|r) return 1;;
  45.                 *) return 1;;
  46.             esac
  47.                 else
  48.                         return 1
  49.                 fi
  50.         else
  51.                 return 1
  52.         fi
  53. }
  54. #取得正确的IP值
  55. #通过调用函数judge_ip,变量IP_ADDR的最终值就是正确的
  56. function read_right_IP(){
  57.         read -p "请输入${IP_ARRAY[a]}的值:" IP_ADDRS
  58. #       IP_ADDRS=""
  59.     judge_ip "${IP_ADDRS}";
  60.     i=`echo $?`
  61.     #循环直到输入正确的IP为止
  62.     until [ "$i" -eq 0 ];do
  63.         echo -e "\033[31m\n你输入了错误的${IP_ARRAY[a]}值:${IP_ADDRS} ====>>>>\033[0m"
  64.         read -p "重新输入${IP_ARRAY[a]},请输入:" IP_ADDRS
  65.         judge_ip "${IP_ADDRS}";
  66.         i=`echo $?`
  67.     done
  68. }
  69. #判断网卡配置文件,存在就备份,不存在则新建一个空白文件
  70. function chang_ip(){
  71.         if [ -f ${IP_CONFIG} ];then
  72.                 cp ${IP_CONFIG} ${IP_CONFIG}.bak
  73.                 #网卡的MAC地址
  74.                 HW_ADDR=`grep 'HWADDR' ${IP_CONFIG}`
  75.                 #IP配置状态
  76.                 DHCP_STATUS=`grep 'BOOTPROTO' ${IP_CONFIG} |awk -F= '{print toupper($2)}'`
  77.                 #如果BOOTPROTO的值是DHCP,就继续设置IP,否则退出呢
  78.                 if [ "${DHCP_STATUS}" = 'DHCP' ];then
  79.                         echo -e "\033[32mIP获取方式为:${DHCP_STATUS},下面将修改为静态IP...\033[0m"
  80.                         rm -rf ${IP_CONFIG} && touch ${IP_CONFIG};
  81. #把部分基本信息导入到网卡配置文件内
  82. cat >${IP_CONFIG} <<EOF
  83. DEVICE=eth0
  84. HWADDR
  85. TYPE=Ethernet
  86. ONBOOT=yes
  87. BOOTPROTO=static
  88. EOF
  89. ##########################################
  90.                         #把原来MAC地址写进去
  91.                         sed -i "/HWADDR/s/HWADDR/${HW_ADDR}/g" ${IP_CONFIG}
  92.                         #循环五次,共调用函数五次,分别获取需要设置的所有数据
  93.                         for ((a=0;a<=4;a++))
  94.                         do
  95.                                 read_right_IP;
  96.                                 echo -e "\033[32m\n${IP_ARRAY[a]}=${IP_ADDRS}\033[0m"
  97.                                 #把内容追加到网卡配置文件的最后
  98.                                 echo -e "${IP_ARRAY[a]}=${IP_ADDRS}" >> ${IP_CONFIG}
  99.                         done
  100.                         echo -e "\033[32m\n+++++++设置的IP相关信息如下+++++++\033[1m"
  101.                         cat ${IP_CONFIG};
  102.                         echo -e "\033[32m\n++++++++++++++++++++++++++++++++++\033[0m"
  103.                 else
  104.                         echo -e "\033[32m系统IP已经是:${DHCP_STATUS},无须修改...\033[0m"
  105.                 fi
  106.         else
  107.                 echo -e "\033[31m网卡配置文件:${IP_CONFIG}不存在,请检查系统是否被破坏...\033[0m"
  108.         fi
  109. }
  110. #脚本选择菜单
  111. menu=(
  112.         chang_ip_config
  113.         chang_hostname_config
  114.         chang_hosts_confg
  115.         exit_menu
  116.         help_menu
  117. )
  118. PS3="Please select menu will running to do (Need help,Please input: 5 ): "
  119. select i in ${menu[@]}
  120. do
  121.         case $i in
  122.                 ${menu[0]})
  123.                         chang_ip
  124.                         if [ "$?" -eq 0 ];then
  125.                                 echo -e "\033[32m修改IP为静态获取成功...\033[0m"
  126.                         else
  127.                                 echo -e "\033[31m请检查IP是否为静态获取...\033[0m"
  128.                         fi
  129.                 ;;
  130.                 ${menu[1]}) exit ;;
  131.                 ${menu[2]}) exit ;;
  132.                 ${menu[3]}) exit ;;
  133.                 ${menu[4]})
  134.                         echo -e "\033[32m=========帮助菜单内容如下==========\033[0m"

  135.                         for ((i=0;i<"${#menu[@]}";i++))
  136.                         do
  137.                                 echo -e "\033[33m `expr $i + 1`) ${menu[i]} \033[0m"
  138.                         done
  139.                 ;;
  140.         esac
  141. done
复制代码
-------------------------------------------------
可能是复制粘贴的原因,导致上面的代码在这个位置有错误,可能还有未发现的。
QQ截图20150510094848.jpg

=====================================================
脚本使用效果图示: QQ截图20150508152904.jpg

QQ图片20150508161106.png
QQ图片20150508161119.png
QQ图片20150508161126.png



回复

使用道具 举报

0

主题

44

帖子

848

积分

高级会员

Rank: 4

积分
848
QQ
发表于 2015-5-8 20:19:16 | 显示全部楼层
写的太好了,谢谢分享哦!
回复 支持 反对

使用道具 举报

219

主题

257

帖子

1515

积分

超级版主

Rank: 8Rank: 8

积分
1515
发表于 2015-5-9 22:22:04 | 显示全部楼层
写得好好,我要好好消化下!
回复 支持 反对

使用道具 举报

0

主题

26

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2015-5-12 19:31:59 | 显示全部楼层
写的真好。像个小程序了,学习下
回复 支持 反对

使用道具 举报

208

主题

269

帖子

1936

积分

超级版主

Rank: 8Rank: 8

积分
1936
发表于 2015-5-14 14:12:30 | 显示全部楼层
good
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-4-25 02:47 , Processed in 0.044464 second(s), 24 queries , Apc On.

快速回复 返回顶部 返回列表