Получить первое значение, Happy_demon, 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]. не подскажете- как мне это значение получить? заранее спасибо. |
- Получить первое значение, chip, 11:32 , 28-Апр-06 (1)
>Трям! >Преамбула. пытаюсь настроить 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 }'`
- Получить первое значение, Happy_demon, 12:07 , 28-Апр-06 (2)
Спасибо! вот уже почти. если приведенную строчку запускать из консоли- действительно получается то что надо. но т.к. у меня скрипт на перле, то он выдает либо все 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"; но это уже мелочи- счаз разберусь. еще раз огромное спасибо!
- Получить первое значение, Happy_demon, 12:19 , 28-Апр-06 (3)
#!/usr/bin/perl @a=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`; $user_if=substr (@a[0],0,3); print "$user_if\n";вот теперь совсем хорошо. еще раз спасибо.
- Получить первое значение, Happy_demon, 14:37 , 28-Апр-06 (4)
все хорошо работает, пока это запускается из отдельного скрипта, как вставляю в рабочий скрипт - он начинает другое значение. #!/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 - почемуто поднимается (для примера) не нулевой, а первый интерфейс. если не сложно посоветуйте
- Получить первое значение, idle, 17:13 , 28-Апр-06 (5)
>все хорошо работает, пока это запускается из отдельного скрипта, как вставляю в >рабочий скрипт - он начинает другое значение. >#!/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.
|