勤能补拙,厚积薄发

合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下
随笔 - 19, 文章 - 0, 评论 - 3, 引用 - 0
数据加载中……

[Perl]支持win/nix操作系统上修改host文件

支持win/nix操作系统上修改host文件的脚本
调试了一下,可以使用
#!/usr/bin/perl -w
use strict;
if (@ARGV != 1) {
    print "run program as ./*.pl [win|nix]\n";
    exit(1);
}
my $dnsfile;
my $os_version = 0# default for nix
if ($ARGV[0] eq "win") {
    $dnsfile = "C:\\WINDOWS\\system32\\drivers\\etc\\hosts";
    $os_version = 1# 1 for win
elsif ($ARGV[0] eq "nix") {
    $dnsfile = "/etc/hosts";
}
print "input your command:\n";
print "(r for recover your orginal DNS setting)\n";
print "(m for modify DNS setting as the program set)\n";
print "(q for quit this program)\n";
my $cmd;
while (defined ($cmd = <STDIN>)) {
    chomp($cmd);
    if ($cmd eq "r") {
        &restore;
    } elsif ($cmd eq "m") {
        my @newfile;
        open FILE, "< hosts";
        while (<FILE>) {
            push(@newfile$_);
        }
        if (-e $dnsfile.".user.bak") {
            if (! open FILE, "< $dnsfile.user.bak") {
                die "can't open $dnsfile.user.bak: $!";
                exit(1);
            }
        } else {
            if (! open FILE, "< $dnsfile") {
                die "can't open $dnsfile: $!";
                exit(1);
            }
        }
        while (<FILE>) {
            push(@newfile$_);
        }
        if ($os_version == 0) {
            system "/bin/sh""-c""rm $dnsfile";
        } elsif ($os_version == 1) {
            system "c:\\WINDOWS\\system32\\cmd.exe""/c""del $dnsfile";
        }
        if (! open FILE, "> $dnsfile") {
            die "can not open $dnsfile: $!";
            exit(1);
        }
        foreach my $newline (@newfile) {
            print FILE "$newline";
        }
        close FILE;
    } elsif ($cmd eq "q") {
        print "the program will quit right now!\n";
        &restore;
        last;
    }
}

sub restore {
    if (-e "$dnsfile.user.bak") {
        if ($os_version == 0) {
            system "/bin/sh""-c""cp $dnsfile.user.bak $dnsfile";
        } elsif ($os_version == 1) {
            system "c:\\WINDOWS\\system32\\cmd.exe""/c""copy $dnsfile.user.bak $dnsfile";
        }
    } else {
        if ($os_version == 0) {
            system "/bin/sh""-c""cp $dnsfile $dnsfile.user.bak";   
        } elsif ($os_version == 1) {
            system "c:\\WINDOWS\\system32\\cmd.exe""/c""copy $dnsfile $dnsfile.user.bak";
        }
    }
}

运行界面截图:
winXP(虚拟机)

Ubuntu


posted on 2012-08-13 11:13 lee007 阅读(246) 评论(0)  编辑 收藏 引用 所属分类: Perl/Python


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理