The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Получить первое значение"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Получить первое значение"  
Сообщение от Happy_demon email(ok) on 28-Апр-06, 11:05 
Трям!
Преамбула. пытаюсь настроить mpd. для этого динамически в ipfw надо добавить правило вида

ipfw add $rule_namber[0] allow ip ftom any to $user_ip via $user_if

это строчка из скрипта, который я нашел здесь. все работает, кроме переменной $user_if. я ее хочу получить примерно таким образом
ifconfig | grep ng | grep 1500 -n | awk 'FS=":" {print $1}'
ну в общем понятно запускаю айфиконфиг, ищу интерфейсы ng если интерфейс не занят, то у него mtu равно 1500, греп нумерует найденные строки и вот теперь я хочу чтобы переменная $user_if была бы равна ng[номер_первой_найденной_строки - 1]. не подскажете- как мне это значение получить? заранее спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Получить первое значение"  
Сообщение от chip email(ok) on 28-Апр-06, 11:32 
>Трям!
>Преамбула. пытаюсь настроить mpd. для этого динамически в ipfw надо добавить правило
>вида
>
>ipfw add $rule_namber[0] allow ip ftom any to $user_ip via $user_if
>
>это строчка из скрипта, который я нашел здесь. все работает, кроме переменной
>$user_if. я ее хочу получить примерно таким образом
>ifconfig | grep ng | grep 1500 -n | awk 'FS=":" {print
>$1}'
>ну в общем понятно запускаю айфиконфиг, ищу интерфейсы ng если интерфейс не
>занят, то у него mtu равно 1500, греп нумерует найденные строки
>и вот теперь я хочу чтобы переменная $user_if была бы равна
>ng[номер_первой_найденной_строки - 1]. не подскажете- как мне это значение получить? заранее
>спасибо.

А зачем их еще нумеровать?! Насколько я понял, вы хотите получить "первый" свободный negraph интерфейс. Почему просто не воспользоваться:

user_if=`ifconfig | grep -E '^ng.*1500' | awk -F: '{ print $1 }'`

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Получить первое значение"  
Сообщение от Happy_demon email(ok) on 28-Апр-06, 12:07 
Спасибо! вот уже почти. если приведенную строчку запускать из консоли- действительно получается то что надо. но т.к. у меня скрипт на перле, то он выдает либо все 4 строчки

#!/usr/bin/perl -w
$user_if=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
print "$user_if\n";

в этом случае, либо целиком одну строку в случае

#!/usr/bin/perl -w
@user_if=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
print "@user_if[0]\n";

но это уже мелочи- счаз разберусь.
еще раз огромное спасибо!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Получить первое значение"  
Сообщение от Happy_demon email(ok) on 28-Апр-06, 12:19 
#!/usr/bin/perl
@a=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
$user_if=substr (@a[0],0,3);
print "$user_if\n";

вот теперь совсем хорошо. еще раз спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Получить первое значение"  
Сообщение от Happy_demon email(ok) on 28-Апр-06, 14:37 
все хорошо работает, пока это запускается из отдельного скрипта, как вставляю в рабочий скрипт - он начинает другое значение.
#!/usr/bin/perl
use strict;
$|=1;
my $username = $ARGV[4];
my @rule_numbers;
my $user_ip;
my $logmsg = '/usr/local/billing/vpn/logmsg.pl';
my $user_if;
my $er_if;
my @a;
if($username eq 'mpd_vpn!'){
    @rule_numbers = ('350', '351', '1', '2');
    $user_ip = '192.168.25.10';
    }else{
   `$logmsg "$username connected!"`;
}
  
                  @a=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
                  $user_if = substr (@a[0],0,3);

sub ipfw_init {
    `ipfw add $rule_numbers[0] allow udp from $user_ip to any via $user_if`;
    `ipfw add $rule_numbers[1] allow tcp from $user_ip to any via $user_if`;
    `ipfw add $rule_numbers[2] count ip from any to $user_ip`;
    `ipfw add $rule_numbers[3] count ip from $user_ip to any`;
}
&ipfw_init();
`$logmsg "user=$username action=connect"`;

когда запускаю скрипт ручками- (добавив print "$user_if\n"); действительно выдает первый незанятый интерфейс ng. а когда этот скрипт стартует с mpd - почемуто поднимается (для примера) не нулевой, а первый интерфейс. если не сложно посоветуйте

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Получить первое значение"  
Сообщение от idle (ok) on 28-Апр-06, 17:13 
>все хорошо работает, пока это запускается из отдельного скрипта, как вставляю в
>рабочий скрипт - он начинает другое значение.
>#!/usr/bin/perl
>use strict;
>$|=1;
>my $username = $ARGV[4];
>my @rule_numbers;
>my $user_ip;
>my $logmsg = '/usr/local/billing/vpn/logmsg.pl';
>my $user_if;
>my $er_if;
>my @a;
>if($username eq 'mpd_vpn!'){
>    @rule_numbers = ('350', '351', '1', '2');
>    $user_ip = '192.168.25.10';
>    }else{
>   `$logmsg "$username connected!"`;
>}
>
>            
>      @a=`ifconfig | grep -E '^ng.*1500'
>| awk -F: '{print $1}'`;
>            
>      $user_if = substr (@a[0],0,3);
>
>sub ipfw_init {
>    `ipfw add $rule_numbers[0] allow udp from $user_ip to
>any via $user_if`;
>    `ipfw add $rule_numbers[1] allow tcp from $user_ip to
>any via $user_if`;
>    `ipfw add $rule_numbers[2] count ip from any to
>$user_ip`;
>    `ipfw add $rule_numbers[3] count ip from $user_ip to
>any`;
>}
>&ipfw_init();
>`$logmsg "user=$username action=connect"`;
>
>когда запускаю скрипт ручками- (добавив print "$user_if\n"); действительно выдает первый незанятый интерфейс
>ng. а когда этот скрипт стартует с mpd - почемуто поднимается
>(для примера) не нулевой, а первый интерфейс. если не сложно посоветуйте
>
Пропишите полные пути и добавьте use warnings.
Вместо @a[0] должно быть $a[0].
Попробуйте $1 заэкранировать: \$1.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру