Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15497735
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2010-03-13 16:12:55

luther@gliethttp:~$ vim dns_ds.sh
#!/usr/bin/awk -f
# dns_ds.sh
# 说明:当网线被不经意拔掉之后本来手工设置在/etc/resolv.conf中的静态dns将被清空,
#       故加入该daemon脚本,当检测到dns丢失之后,网线重新恢复正常之后,自动添加静态dns,
#       无需再手工添加,实现本地静态dns添加的自动化[luther.gliethttp].
# 对于网线是否被拔掉的检测,可以使用检测/sys/class/net/eth0/carrier或者operstate文件中
# 数值来判断
# 输入文件读取第1行数据,如果直接
# 执行./dns_ds.sh那么将从stdin读取一行数据,如果加入参数
# 执行./dns_ds.sh /etc/passwd
#////////////反复执行的语句体//////////////
{
    # print $0 # 打印读入的一行
    print # 打印读入的一行,和上面的效果一样
    exit; # 显示的退出,否则,awk将一直反复执行{}内的语句
}
#////////////程序加载时,首先执行的语句体,执行完该语句体之后,将重复执行上面{}内部语句//////////////
BEGIN {
    dns_ip = "192.168.1.101"
    dns_file = "/etc/resolv.conf"
    print dns_file
    do {
    # if (system(sprintf("[ -f %s ]", dns_file)) == 0) {
    if (system("[ -f "dns_file" ]") == 0) {
        dns_ip_ok = 0
        while (getline < dns_file) {
            if ($1 == "nameserver") {
                if ($2 != dns_ip) {
                    system("sed \"1i\\nameserver "dns_ip"\" "dns_file">/tmp/dns_file.tmp.luther.gliethttp.00")
                    system("mv /tmp/dns_file.tmp.luther.gliethttp.00 "dns_file)
                    print dns_ip" appended!"
                }
                dns_ip_ok = 1
                break
            }
        }
        if (dns_ip_ok == 0) {
            system("echo \"nameserver "dns_ip"\" >> "dns_file)
            print "null line!"
        }
        close(dns_file)
    } else {
        print dns_file" dosen't exit!"
    }
        system("sleep 4")
    } while (1)
}
#////////////程序退出时调用//////////////
END {
    # print "exit!\n"
}
luther@gliethttp:~$ sudo ./dns_ds.sh
或者加到rc.local启动脚本中
阅读(2990) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~