在CU看到一个网友要写的脚本,我也不会写了,郁闷

在CU看到一个网友要写的脚本,我也不会写了,郁闷

在CU看到一个网友要写的脚本,我也不会写了,郁闷
1 hello,all

********************
#OP Server properties file
#Fri May 06 23:46:23 CST 2005
net.rtp.session.timeout=600000
net.rtp.responseport=on
net.net4.interface=
net.auth.loglevel.console=0
net.registrar.upper.timeout=30000
op1.admin.mail=
net.net2.interface=
net.net1.interface=61.235.127.97
net.rtp.relay=off
net.rtp.loglevel.console=0
mng.loglevel.console=0
net.rtp.port.min=10000
net.registrar.loglevel.console=0
net.rtcp.loglevel.console=0
net.session.limit=-1
net.sip.timeout.bye=20000
net.auth.policy4=off
net.auth.policy3=off
net.auth.realm=
net.auth.policy2=off
op.admin.mail\ =innow@163.com
net.usrdir.plugins=SqlUserDir
net.net5.interface=
net.listener.loglevel.console=0
networkaddress.cache.ttl=-1
************************
另,我想在修改好后过30秒自动把这个文件显示出来.
(filename: ops.conf 位置: /usr/local/ops/conf/ops.conf)
************************
上面是我的一个服务器配置文件的一小部分.由于我是用拨号方式的,IP随时会变,我想有一个小脚本,让每次由拨号所得的 IP (ppp0) 放(修改)到-->
net.net1.interface=61.235.127.97
,烦请各位帮忙.
小弟对perl,shell,不是很了解,在需要的时候,不可能从头学起,so,,,,,
先谢!
---------------------------------------------------------------------------------------
以上的CU这位朋友的要求,CU上朋友给写了个SHELL脚本,
#!/bin/sh
oldip=$(awk -F"=" '/net1/ {print $2}' ops.conf)
newip=$(/sbin/ifconfig |grep "inet" |cut -c 0-36|sed -e 's/[a-zA-Z: ]//g')
sed -i "/net1/s/${oldip}/${newip}/" ops.conf
sleep 30
echo "The new ip(ppp0) is ${newip}"

我想修改成PERL,大家看看昨写,




   

[quote]--#!/...
1 [quote]
#!/usr/bin/perl
#cnhackTNT AT perlchina.org

$file='/usr/local/ops/conf/ops.conf';
open(FH,$file) or die "can not open file: $file !\n";
while(<FH>){
chomp;
if(/net1/){
$oldip=(split /=/)[1];
last;
}
}
close FH;
print "oldip is $oldip\n";
while($_=`/sbin/ifconfig`){
if(/inet/){
($_=~s/inet addr:(\d+\.\d+\.\d+.\d+) .*/\1/) unless $newip=~/127.0.0.1/;
$newip=$1;
last;
}
}
!system("perl -i -pe \"s/$oldip/$newip/\" $file") or die "can not call system function:$!\n";
print "Delay 30 seconds!\n";
sleep (30);
print "newip is $newip\n";
[/quote]

以上的代码除了调用系统的ifconfig命令来获得网卡的配置信息外,其他的功能基本上都用perl的功能来实现,比起前面那个bash有点长(因为前面的bash调用了很多系统命令来完成这个任务)
当然你也可以完全仿照这个bash脚本把它改写成perl脚本,写出来的perl代码绝对不会比这个bash脚本更长。

anyway,There Is More Than One Way To Do It!

要注意的是无论是那个bash脚本还是这个perl脚本,都得针对当前的机器网卡配置情况,这两个脚本都不是万能的,如果有必要你得根据当前情况做出相应修改(比如我的机器上装了vmware,他虚拟了网卡出来,或者你有多块网卡也得考虑),如果你只有一块网卡,那么应该直接可以用。
写了个Freebsd下的,
ifconfig lnc0 | grep "inet" | awk '{print $2}'
看来我还是没学好PERL,努力中...........