2016-06-23 4 views
0

Это мой простой сценарий оболочкиИспользование СЭД команды в сценарии оболочки

sample.sh

LOCALCONFIGDIR="Install" 
CONFLOC="$LOCALCONFIGDIR/server.conf" 
echo "Enter Web Url:" 
read weburl 
echo "sed 's/^\(ServerName\)$/\1 "$weburl"/' "$CONFLOC 
sed "'s/^\(ServerName\)$/\1 "$weburl"/' "$CONFLOC 

Когда я запускаю этот код, я получаю результат в эхо-команды следующим образом.

sed 's/^\(ServerName\)$/\1 www.weburl.com/' Install/server.conf 

Но при выполнении команды sed в следующей строке оно говорит об ошибке ниже.

sed: -e expression #1, char 1: unknown command: `'' 

Я пробовал команду, произведенную в эхо-заявлении с экрана терминала, работает. Но Line number 5, не работает из сценария оболочки

ответ

1

Вы должны использовать один набор цитат, а не два, и так как вы хотите, чтобы переменная $weburl расширены, вы должны использовать двойные кавычки:

sed "s/^\(ServerName\)$/\1 $weburl/" "$CONFLOC" 

Это «Хорошо, если $weburl не содержит никаких косых черт. Если это произойдет, вам нужно использовать другой характер, чем /, такие как %, чтобы отделить части команды замены:

sed "s%^\(ServerName\)$%\1 $weburl%" "$CONFLOC" 
+0

Он работает. sed "s% $^\ (ServerName \) $% \ 1 www.weburl.com%" Install/server.conf. Но он не добавляет текст www.weburl.com после ServerName. –

+1

Я просто удалил бродячий '' 'во второй' sed'; если бы вы использовали это, это остановило бы игру. Если это не проблема, возможно, ваш файл конфигурации имеет пробелы до или после «ServerName» в строке конфигурации, или, возможно, в файле нет строки, содержащей только «имя_сервера». –

+1

Возможно, команды sed лучше всего использовать, используя одинарные кавычки и отображая переменные оболочки с двойными кавычками, то есть 'sed 's /.../'" $ {var} "'/' file'. Причина в том, что метасимволы, невольно используемые в команде sed, меня интерполируют оболочкой. – potong