Страница 1 из 1

Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 6:31:22
sofinan
Здрасти, тут такая задача возникла, запустить perl скрипт из shell скрипта и передать ему переменную в данном случае IFACE.

Сам скрипт

Код: Выделить всё

#!/bin/sh
IPACCTCTL="/usr/local/sbin/ipacctctl"
IFACE=$1
$IPACCTCTL ${IFACE}_ip_acct:$IFACE checkpoint
$IPACCTCTL ${IFACE}_ip_acct:$IFACE show | /root/diplom/try2.pl $IFACE
$IPACCTCTL ${IFACE}_ip_acct:$IFACE clear

Код: Выделить всё

Can't open rl0: No such file or directory at /root/diplom/try2.pl line 21.
Can't open vr0: No such file or directory at /root/diplom/try2.pl line 21.
В чем ошибка не пойму, вроде все правильно...Али нет?)))Подскажите плиз)

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 6:39:59
zg
sofinan писал(а):В чем ошибка не пойму, вроде все правильно
если всё правильно, то должно работать
sofinan писал(а):Али нет?)))Подскажите плиз)
гм.. исходник давай, тут телепатов нет

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 7:00:00
sofinan
какой именно исходник? Исходник на perl выглядит так

Код: Выделить всё

#!/usr/bin/perl
print ${argv[0]}

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 7:13:23
ProFTP

Код: Выделить всё

#!/usr/bin/perl
print "@argv\n";

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 7:26:44
sofinan
)))Нее, дело не в скрипте на perl, дело в том что данные которые порождаются show должны перенаправляться на обработку скрипту на try2.pl с параметром $IFACE, а получается что имя скрипта и параметра интерпретириются как два разных скрипта.

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 8:12:05
zg
sofinan писал(а):Исходник на perl выглядит так
гм.. кто-то из вас двоих врёт либо ты либо перл
sofinan писал(а):at /root/diplom/try2.pl line 21.
тебя номер строки не смущает?

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 8:38:55
sofinan
)))Ладно каюсь это был я))))))))))))))))))))) Блин дак значит это все таки ошибка в перл скрипте))))))ZG спасибо за подсказку. Даже не мог подумать что это он ругается(((((

Код: Выделить всё


#!/usr/bin/perl -w
use DBI;
#       open(NG,<>) or die "не";
my $table_name=$ARGV[0] ;
print $table_name;
my $dbname='IPPACTDB';
my $user='*******;
my $passwd='******';
my $ip_out="*********";
my $network="192.168.0.";
my $time_stamp;
my $ip_source;
my $port_source;
my $ip_dest;
my $port_dest;
my $num_proto;
my $quantity_pack;
my $quantity_byte;
$dbh=DBI->connect("DBI:Pg:dbname='$dbname'","$user","$passwd") or die \
"Не connect";
while ($line=<>){                                                                           #ошибка тут
        ($ip_source,$port_source,$ip_dest,$port_dest,$num_proto,
        $quantity_pack,$quantity_byte,$time_stamp)=split(" ",$line);
#       for ($ip_source,$ip_dest){
#               s/$network//; s/$ip_out/0/;
#       }
#       print localtime($time_stamp)."\n";
#       print $ip_source."\n";
#       print $port_source."\n";
#       print $ip_dest."\n";
#       print $port_dest."\n";
#       print $num_proto."\n";
#       print $quantity_pack."\n";
#       print $quantity_byte."\n";
        $sth=$dbh->prepare("insert into stat (ip_source, port_source, \
         ip_dest, port_dest, num_proto, quantity_pack, quantity_byte, \
        time_stamp) values('$ip_source','$port_source','$ip_dest', \
        '$port_dest','$num_proto','$quantity_pack','$quantity_byte', \
        '$time_stamp')");
$sth->execute();
$sth->finish();
}
$dbh->disconnect;
#print "SUCCESS\n";

Как теперь считывать данные? while ($line=<>)- такая тема уже не проканает)

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 8:41:20
zg
sofinan писал(а):while ($line=<>)- такая тема уже не проканает)
это к ProFTP, он такой скрипт уже писал :smile:

кстати, можешь поискать по форуму подобных скриптов тут уже штук пять.

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 8:42:50
sofinan
А ну впринципе если сделать так while <STDIN> это работает...Но верно ли это?!)))))

Re: Передача пераметров SHELL->PERl

Добавлено: 2009-04-28 8:45:47
zg
sofinan писал(а):А ну впринципе если сделать так while <STDIN> это работает...Но верно ли это?!)))))
если работает, значит верно. В принципе пойдёт и так.