Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Пн Май 30 2005 15:24 Заголовок сообщения: Вопрос про if ... then ... |
|
|
Подскажите, граждане...
Есть (в упрощении) вот такая вот конструкция
Код: |
#!/bin/sh
actrule=`/sbin/ipfw show 11100 2>&1`
if [ ${actrule} != "ipfw: rule 11100 does not exist" ]; then
/sbin/ipfw delete 11100
fi
|
Результат выполнения файла:
[: ipfw:: unexpected operator
Как заставить сравниться строку, успешно выводимую по "echo ${actrule}" c текстом "ipfw: rule 11100 does not exist"
ЗЫ Наверное, else должна быть в курсе...
ЗЗЫ Ах, да! FreeBSD 4.10 _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Пн Май 30 2005 16:44 Заголовок сообщения: |
|
|
Код: | #!/bin/sh
actrule=`/sbin/ipfw show 11100 2>&1`
if [ "$actrule" != "ipfw: rule 11100 does not exist" ]; then
/sbin/ipfw delete 11100
fi
|
|
|
Вернуться к началу |
|
|
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Вт Май 31 2005 08:19 Заголовок сообщения: |
|
|
Crash, спасибо! Заработало так, как ожидалось
Как я понял, фигурные скобки интерпретировались как последовательность, которую надо просто выполнить.
А может еще что надо бы тут переделать? _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Май 31 2005 10:39 Заголовок сообщения: предела совершенству не существует |
|
|
a-m-d писал(а): | Crash, спасибо! Заработало так, как ожидалось
Как я понял, фигурные скобки интерпретировались как последовательность, которую надо просто выполнить. | Нет, фигурные скобки в данном случае ни при чём. Просто результат подстановки содержит пробелы, поэтому для команды "открывающая квадратная скобка" оказываются неправильными аргументы, а двойные кавычки объединяют всё содержимое переменной actrule в один оргумент.
a-m-d писал(а): | А может еще что надо бы тут переделать? | [ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100
---------------------------
предела совершенству не существует |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Вт Май 31 2005 10:53 Заголовок сообщения: Re: предела совершенству не существует |
|
|
критикан писал(а): | [ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100
---------------------------
предела совершенству не существует |
это вы предлагаете запустить вместо структуры if?
если да то вопрос, а вы проверили работоспособность? |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Май 31 2005 14:55 Заголовок сообщения: найден предел совершенству! это разбитый лоб дурака |
|
|
crash писал(а): | если да то вопрос, а вы проверили работоспособность? | Вообще говоря, на такие вопросы я не отвечаю, так как рассматриваю их равноценными предложениям типа "глупость", "дурак", "неуч" и т. п.
Вас не устраивает предложение? Или Вы считаете, что оно не является равноценной заменой оператора "if"? Если это так, так скажите, что в нём неправильно. И докажите это, а устраивать экзамен идите куда-нибудь, куда сами решите.
-----------------------
найден предел совершенству! это разбитый лоб дурака |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Вт Май 31 2005 16:16 Заголовок сообщения: Re: найден предел совершенству! это разбитый лоб дурака |
|
|
критикан писал(а): | crash писал(а): | если да то вопрос, а вы проверили работоспособность? | Вообще говоря, на такие вопросы я не отвечаю, так как рассматриваю их равноценными предложениям типа "глупость", "дурак", "неуч" и т. п.
|
ну это дело ваше. я просто просил ответить, а не рассказывать кто, кого и кем считает. а вы начали тут полемику разводить вместо того чтобы ответить "да" или "нет".
критикан писал(а): | Вас не устраивает предложение? Или Вы считаете, что оно не является равноценной заменой оператора "if"? Если это так, так скажите, что в нём неправильно. И докажите это, а устраивать экзамен идите куда-нибудь, куда сами решите.
|
лично меня устраивает все, главное чтобы устроило того кто спросил.
насчет экзамена это не ко мне, мне бы самому ответить на что-нибудь.
доказывать тоже не буду, просто интересно было
Цитата: | diamondmir# [ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100
[: !=: unexpected operator
diamondmir#
|
|
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Май 31 2005 16:47 Заголовок сообщения: Re: найден предел совершенству! это разбитый лоб дурака |
|
|
crash писал(а): | diamondmir# [ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100
[: !=: unexpected operator
diamondmir#
| попробуйте так:
[ "-`/sbin/ipfw show 11100 2>&1`" != "-ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100 |
|
Вернуться к началу |
|
|
dio
Зарегистрирован: 07.10.2004 Сообщения: 722 Откуда: Дважды орденоносная Кубань,Краснодар
|
Добавлено: Вт Май 31 2005 16:56 Заголовок сообщения: Re: найден предел совершенству! это разбитый лоб дурака |
|
|
критикан писал(а): | crash писал(а): | если да то вопрос, а вы проверили работоспособность? | Вообще говоря, на такие вопросы я не отвечаю, так как рассматриваю их равноценными предложениям типа "глупость", "дурак", "неуч" и т. п.
Вас не устраивает предложение? Или Вы считаете, что оно не является равноценной заменой оператора "if"? Если это так, так скажите, что в нём неправильно. И докажите это, а устраивать экзамен идите куда-нибудь, куда сами решите.
-----------------------
найден предел совершенству! это разбитый лоб дурака |
Как это было нехорошо....crash уважаемый человек и ДАВНО известный.... _________________ All is not lost! |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Вт Май 31 2005 16:59 Заголовок сообщения: Re: найден предел совершенству! это разбитый лоб дурака |
|
|
критикан писал(а): | crash писал(а): | diamondmir# [ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100
[: !=: unexpected operator
diamondmir#
| попробуйте так:
[ "-`/sbin/ipfw show 11100 2>&1`" != "-ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100 |
так лучше, но нет проверки все равно. то есть соблюдается равенство или нет, результат один и тот же |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Май 31 2005 17:01 Заголовок сообщения: 2dio: flame? Press ignore to continue... (-) |
|
|
2dio:
Already pressed
Последний раз редактировалось: критикан (Вт Май 31 2005 17:15), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Май 31 2005 17:14 Заголовок сообщения: зачем молиться? неужели "ради бога"? |
|
|
crash писал(а): | критикан писал(а): | [ "-`/sbin/ipfw show 11100 2>&1`" != "-ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100 |
так лучше, но нет проверки все равно. то есть соблюдается равенство или нет, результат один и тот же | "man sh" говорит, что в двух командах, соединённых оператором "&&", вторая команда выполняется, если первая завершается с нулевым кодом завершения. Эта ситуация идентична конструкции "if", если в конструкции "if" между "then" и "fi" стоит одна команда. Кстати, пустой вывод первой команды (именно его Вы привели при демонстрации ошибочного исполнения составной команды) вызывает ошибку в обоих случаях, так как это не ошибка конструкции "if"/"&&", а ошибка некорректных аргументов команды "test". Поэтому "минус" следует ставить в обоих случаях.
----------------------
зачем молиться? неужели "ради бога"? |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Вт Май 31 2005 17:26 Заголовок сообщения: Re: зачем молиться? неужели "ради бога"? |
|
|
критикан писал(а): | crash писал(а): | критикан писал(а): | [ "-`/sbin/ipfw show 11100 2>&1`" != "-ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100 |
так лучше, но нет проверки все равно. то есть соблюдается равенство или нет, результат один и тот же | "man sh" говорит, что в двух командах, соединённых оператором "&&", вторая команда выполняется, если первая завершается с нулевым кодом завершения. |
man я читал тоже.
но я говорю что не работает оба ваших варианта.
хотя пусть тестирует вопрошающий)) |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Май 31 2005 17:51 Заголовок сообщения: зачем молиться? богу это не надо, ему надо жить по-божески! |
|
|
crash писал(а): | не работают оба ваших варианта | К сожалению у меня нет под рукой юникса с фаеруоллом, поэтому не могу посмотреть, что выводит команда
/sbin/ipfw show 11100 2>&1
если в выходном потоке команды есть символы двойных кавычек, то команда test отработает неправильно, и нужно предварительно обработать выходной поток текстовым обработчиком. Но в любом случае это ошибка аргументов команды test, а не конструкций if/&&. Г-н a-m-d сказал, что работает такой пакет:
Код: | #!/bin/sh
actrule=`/sbin/ipfw show 11100 2>&1`
if [ "$actrule" != "ipfw: rule 11100 does not exist" ]; then
/sbin/ipfw delete 11100
fi | но тогда должен работать и такой пакет
Код: | #!/bin/sh
[ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100 | потому что они равноценны. Общее правило такое: в текстовые аргументы команды test вводятся дополнительные символы для предотвращения пустых аргументов. В заключении такой пример: Код: | [ "-`echo 1 2 3`" = "-1 2 3" ] && echo ok | выведет ok, а Код: | [ "-`echo 1 2 3`" != "-1 2 3" ] && echo ok | ничего не выведет.
------------------
зачем молиться? богу это не надо, ему надо жить по-божески! |
|
Вернуться к началу |
|
|
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Ср Июн 01 2005 09:12 Заголовок сообщения: Re: зачем молиться? неужели "ради бога"? |
|
|
crash писал(а): | ...хотя пусть тестирует вопрошающий)) |
Ага. Согласен
Сейчас неотложности подразгребу, подразберусь, чего тут с вечера появилось и отпишусь.
Как я уже говорил, конструкция приводилась упрощенная (минимум, где выползала ошибка), на самом деле и действующее правило $actrule и его номер 11100 вычисляются, и в зависимости от вышестоящего условия (лимит трафика ) правило с найденным номером должно либо создаваться, либо удаляться, либо оставаться как есть. _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Ср Июн 01 2005 10:42 Заголовок сообщения: Re: зачем молиться? богу это не надо, ему надо жить по-божески! |
|
|
критикан писал(а): | К сожалению у меня нет под рукой юникса с фаеруоллом, поэтому не могу посмотреть, что выводит команда
/sbin/ipfw show 11100 2>&1 |
Выводится либо правило 11100 со счетчиками, либо ipfw: rule 11100 does not exist. Двойных кавычек в выводе не замечено.
критикан писал(а): | ...Г-н a-m-d сказал, что работает такой пакет:
Код: | #!/bin/sh
actrule=`/sbin/ipfw show 11100 2>&1`
if [ "$actrule" != "ipfw: rule 11100 does not exist" ]; then
/sbin/ipfw delete 11100
fi | но тогда должен работать и такой пакет
Код: | #!/bin/sh
[ "`/sbin/ipfw show 11100 2>&1`" != "ipfw: rule 11100 does not exist" ] && /sbin/ipfw delete 11100 | потому что они равноценны... |
Проверил, подтверждаю, в моем примере работает. Правило с номером 11100 удаляется.
А
Код: | #!/bin/sh
[ "`/sbin/ipfw show 11100 2>&1`" = "ipfw: rule 11100 does not exist" ] && /sbin/ipfw add 11100 deny ip from 111.111.111.111 to any |
создает правило в случае его отсутствия и ничего не делает, если какое-либо правило 11100 уже существует. _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
|