Назад | Перейти на главную страницу

проблема скрипта unix

У меня есть простой сценарий, который запускается на машине FreeBSD со следующим кодом:

#!/bin/sh
`sed -i .bak '\:#start 172.0.0.3:,\:#end 172.0.0.3:d' /usr/local/etc/racoon/racoon.conf`
echo $?

Он должен удалить блок текста между двумя шаблонами.

Проблема в том, что если я запускаю команду sed непосредственно из оболочки, она работает, если я запускаю скрипт, код возврата равен 0.

Почему это?

Вам нужно удалить обратные кавычки и заменить одинарные кавычки на двойные:

#!/bin/sh
ip=$1
echo $ip
sed -i .bak "\:#start ${ip}:,\:#end ${ip}:d" /usr/local/etc/racoon/racoon.conf

Использование двойных кавычек позволит расширить переменные. Обратные кавычки будут пытаться выполнить стандартный вывод команды (которого в данном случае нет). Например, если вы сделали `echo hi` он попытается выполнить "привет" как команду. sed всегда возвращает 0, если нет ошибки, независимо от того, была ли произведена замена.

Обратные кавычки действительно не нужны (или, возможно, я вас неправильно понимаю). Тот факт, что скрипт вернет 0, также ожидается: код выхода 0 в порядке. Изменить: sed всегда будет выходить с 0, даже если не было замены. Другой код выхода генерируется только тогда, когда в вашем синтаксисе есть ошибка.

Интереснее: код удален или нет?

Судя по вашим комментариям, у вас, вероятно, проблема с регулярным выражением и / или экранированием символов в нем.