Кавычки

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Кавычки

Непрочитанное сообщение densan » 2012-07-02 20:01:54

Здравствуйте.
Пытаюсь реализовать пакетное добавление данных в визуализатор нетфлоу данных 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' 
отрабатывает правильно.

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Кавычки

Непрочитанное сообщение kpp » 2012-07-02 21:01:12

Подозреваю дело в

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

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

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

k="\'net $net\'"
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Кавычки

Непрочитанное сообщение densan » 2012-07-02 22:11:19

заменил 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

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Кавычки

Непрочитанное сообщение kpp » 2012-07-02 22:40:54

А если в выражение:

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

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

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

'net 172.22.36.192/27'
отработает нормально?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Кавычки

Непрочитанное сообщение rayder » 2012-07-03 0:30:58

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

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

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

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

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Кавычки

Непрочитанное сообщение densan » 2012-07-03 6:59:48

если вместо $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

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Кавычки

Непрочитанное сообщение kpp » 2012-07-03 10:04:47

А если так:

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

eval $nfsen --add-channel $group/$office/All filter=${k} colour='#336600'
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Кавычки

Непрочитанное сообщение rayder » 2012-07-03 12:36:44

kpp писал(а):А если так:

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

eval $nfsen --add-channel $group/$office/All filter=${k} colour='#336600'
бес попутал, хотел написать eval, а написал exec :)
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Кавычки

Непрочитанное сообщение densan » 2012-07-03 16:27:14

Заработала конструкция с 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
Большое спасибо за помощь.