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

Кавычки

Добавлено: 2012-07-02 20:01:54
densan
Здравствуйте.
Пытаюсь реализовать пакетное добавление данных в визуализатор нетфлоу данных nfsen.

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

# Задаем константы и пути

nfsen="/usr/local/bin/nfsen"
group="Penza"
office="YP"
net="172.22.36.192/27"

k="'net $net'"
echo $k
$nfsen --add-profile $group/$office description=$office shadow=1
l="$nfsen --add-channel $group/$office/All filter=$k colour='#336600'"
echo $l
$nfsen --add-channel $group/$office/All filter=$k colour='#336600'
скрипт отрабатывает с ошибкой:

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

sh /usr/local/etc/nfsen.sh
'net 172.22.36.192/27'
# YP
name    YP
group   Penza
tcreate Mon Jul  2 20:48:43 2012
tstart  Mon Jul  2 20:30:00 2012
tend    Mon Jul  2 20:30:00 2012
updated Mon Jul  2 20:25:00 2012
expire  0 hours
size    0
maxsize 0
type    continuous / shadow
locked  0
status  new
version 130

/usr/local/bin/nfsen --add-channel Penza/YP/All filter='net 172.22.36.192/27' colour='#336600'
Unknown option: '172.22.36.192/27''
ERR Filter syntax error: 1
хотя вывод

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

echo $l 
/usr/local/bin/nfsen --add-channel Penza/YP/All filter='net 172.22.36.192/27' colour='#336600' 
говорит о том, что скрипт правильно подставил переменные и ручное выполнение

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

/usr/local/bin/nfsen --add-channel Penza/YP/All filter='net 172.22.36.192/27' colour='#336600' 
отрабатывает правильно.

Подскажите где может быть ошибка?

Re: Кавычки

Добавлено: 2012-07-02 21:01:12
kpp
Подозреваю дело в

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

k="'net $net'"
Сделайте так

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

k="\'net $net\'"

Re: Кавычки

Добавлено: 2012-07-02 22:11:19
densan
заменил k="'net $net'" на k="\'net $net\'"

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

sh /usr/local/etc/nfsen.sh
\'net 172.22.36.192/27\'
# YP
name    YP
group   Penza
tcreate Mon Jul  2 23:08:21 2012
tstart  Mon Jul  2 23:00:00 2012
tend    Mon Jul  2 23:00:00 2012
updated Mon Jul  2 22:55:00 2012
expire  0 hours
size    0
maxsize 0
type    continuous / shadow
locked  0
status  new
version 130

/usr/local/bin/nfsen --add-channel Penza/YP/All filter=\'net 172.22.36.192/27\' colour='#336600'
Unknown option: '172.22.36.192/27\''
ERR Filter syntax error: 1

Re: Кавычки

Добавлено: 2012-07-02 22:40:54
kpp
А если в выражение:

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

$nfsen --add-channel $group/$office/All filter=$k colour='#336600'
вместо $k подставить

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

'net 172.22.36.192/27'
отработает нормально?

Re: Кавычки

Добавлено: 2012-07-03 0:30:58
rayder

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

l="$nfsen --add-channel $group/$office/All filter=$k colour='#336600'"
echo $l
если я правильно понял, то вы хотите выполнить команду $l...
если да, то попробуйте так:

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

exec $l;
иначе, то почему бы кавычки рисовать не в переменной, а непосредственно при выполнении команды?
ЗЫ: уже давно научился(на собственных граблях) все переменные брать в {}, т.е. не $param, а ${param} - в будущем избавит от многих проблем

Re: Кавычки

Добавлено: 2012-07-03 6:59:48
densan
если вместо $k в выражение

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

$nfsen --add-channel $group/$office/All filter=$k colour='#336600'
подставить

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

'net 172.22.36.192/27'
то все выполняется без ошибок.
Для эксперимента изменил фильтр с

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

net 172.22.36.192/27
на

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

172.22.36.192 255.255.255.192

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

#!/bin/sh
#
# Задаем константы и пути

nfsen="/usr/local/bin/nfsen"
group="Penza"
office="YP"
net="172.22.36.192 255.255.255.192"

k="'net $net'"
echo ${k}
${nfsen} --add-profile ${group}/${office} description=${office} shadow=1
l="${nfsen} --add-channel ${group}/${office}/All filter=${k} colour='#336600'"
echo ${l}
exec ${l};
$nfsen --add-channel $group/$office/All filter=${k} colour='#336600'

#$nfsen --commit-profile $group/$office
Результат выполнения

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

'net 172.22.36.192 255.255.255.192'
# YP
name    YP
group   Penza
tcreate Tue Jul  3 07:56:08 2012
tstart  Tue Jul  3 07:45:00 2012
tend    Tue Jul  3 07:45:00 2012
updated Tue Jul  3 07:40:00 2012
expire  0 hours
size    0
maxsize 0
type    continuous / shadow
locked  0
status  new
version 130

/usr/local/bin/nfsen --add-channel Penza/YP/All filter='net 172.22.36.192 255.255.255.192' colour='#336600'
Unknown option: '172.22.36.192'
ERR Filter syntax error: 1
возможно проблема в пробелах, т.к. ругается на выражение следующее после пробела в фильтре

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

net 172.22.36.192 255.255.255.192

Re: Кавычки

Добавлено: 2012-07-03 10:04:47
kpp
А если так:

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

eval $nfsen --add-channel $group/$office/All filter=${k} colour='#336600'

Re: Кавычки

Добавлено: 2012-07-03 12:36:44
rayder
kpp писал(а):А если так:

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

eval $nfsen --add-channel $group/$office/All filter=${k} colour='#336600'
бес попутал, хотел написать eval, а написал exec :)

Re: Кавычки

Добавлено: 2012-07-03 16:27:14
densan
Заработала конструкция с eval.
Рабочий скрипт

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

#!/bin/sh
# Задаем константы и пути

nfsen="/usr/local/bin/nfsen"
group="Penza"
office="YP"
net="172.22.36.192/27"

k="'net $net'"
${nfsen} --add-profile ${group}/${office} description=${office} shadow=1
eval $nfsen --add-channel $group/$office/All filter=${k} colour='#336600'
$nfsen --commit-profile $group/$office
Большое спасибо за помощь.