免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5906 | 回复: 11
打印 上一主题 下一主题

shell 如何批量生成ifcfg 配置文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-30 14:46 |只看该作者 |倒序浏览
因为有需要在linux 上创建大量的网络ip 别名,在linux 下通常做法是创建ifcfg-eth0 这样的网卡配置文件

比如ip 需配置有 192.168.0.10-50 linux系统就需创建50个这样的文件.

而且ifcfg-eth0 这里的x 为个数标记

例如
cat ifcfg-eth0:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0

cat ifcfg-eth0:2
DEVICE=eth0:2
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.11
NETMASK=255.255.255.0


请教下,使用shell scripts 怎么样可以做到这样的批量对应关系?

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
2 [报告]
发表于 2009-04-30 14:56 |只看该作者
有,管道有个批量添加的命令,且数值会自动增加,等高人。

论坛徽章:
0
3 [报告]
发表于 2009-04-30 15:18 |只看该作者
循环重定向就行了。

  1. awk '{while ((++i)<=50) print "DEVICE=eth0:"i"\nONBOOT=yes\nBOOTPROTO=static\nIPADDR=192.168.0."9+i"\nNETMASK=255.255.255.0" > "ifcfg-eth0:"i}' <<< 1
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2009-04-30 15:21 |只看该作者
  1. for ((i=1;i<42;i++))
  2. do
  3. echo "DEVICE=eth0:$i
  4. ONBOOT=yes
  5. BOOTPROTO=static
  6. IPADDR=192.168.0.$((i+9))
  7. NETMASK=255.255.255.0
  8. " >ifcfg-eth0:$i
  9. done
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-04-30 15:25 |只看该作者
俺来个丑一点的

  1. #!/bin/bash

  2. E_BADARGS=65


  3. if [ -z "$1" ]
  4. then
  5.         echo "Usage: `basename $0` number"
  6.         exit $E_BADARGS
  7. fi

  8. i=0
  9. filename=ifcfg-eth0
  10. while [ $i -lt $1 ]
  11. do

  12. cat <<END >"$filename:$i"
  13. DEVICE=eth0:$i
  14. ONBOOT=yes
  15. BOOTPROTO=static
  16. IPADDR=192.168.0.$i
  17. NETMASK=255.255.255.0
  18. END
  19. let i++
  20. done

  21. exit 0
复制代码

[ 本帖最后由 xuxingyu 于 2009-4-30 15:36 编辑 ]

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
6 [报告]
发表于 2009-04-30 15:43 |只看该作者
原帖由 waker 于 2009-4-30 15:21 发表
for ((i=1;iifcfg-eth0i
done

学习一下!

论坛徽章:
0
7 [报告]
发表于 2009-04-30 15:54 |只看该作者
waker kwokcn 方法有效

但小问题就是,需要自己口算出 x+9=ip

考虑到ip 是连续的,有没有算法是即直接列出ip 的同时,计算出ip 个数,并对应赋值,比如 10为第一个个数的IP即为1, 11即为2

类似数组了,可能用perl 效果会更好些

anyway 还是谢谢楼上几位的回复

[ 本帖最后由 Ammon 于 2009-4-30 15:56 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-04-30 16:10 |只看该作者
变量换一下就行了,都可以自行定义的。
i是起始IP,j是终止IP,n是计数器。

  1. awk -v i=10 -v j=50 -v n=1 '{while (i<=j) print "DEVICE=eth0:"n++"\nONBOOT=yes\nBOOTPROTO=static\nIPADDR=192.168.0."i++"\nNETMASK=255.255.255.0" > "ifcfg-eth0:"n}' <<< 1
复制代码

论坛徽章:
0
9 [报告]
发表于 2009-04-30 17:18 |只看该作者
可以说明下 awk 这个 <<< 1  是大致代表什么? 谢谢

论坛徽章:
0
10 [报告]
发表于 2009-04-30 17:31 |只看该作者
原帖由 Ammon 于 2009-4-30 17:18 发表
可以说明下 awk 这个  

随便传入的一个值,没有意义,用来驱动awk开始工作。和echo 1 | awk ...是一个效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP