2011-08-09 114 views
0

我的脚本:替换文本,用sed的

#!/bin/sh 

cp -f host.tpl host.conf 
mkdir -p /var/www/$1 

server_replace="s,{server_name},$1,g" 
sed -i $server_replace host.conf 

alias_replace="s,{server_alias},$2,g" 
sed -i $alias_replace host.conf 

文件,在其中我做replacemants(vhost.tpl):

<VirtualHost 0.0.0.0:80> 
    ServerName {server_name} 
    ServerAlias {server_alias} 
    DocumentRoot /var/www/{server_name} 
</VirtualHost> 

它正常工作时我创建一个服务器别名

./vhost.sh domain.com www.domain.com 

虚拟主机但当我希望有更多的别名

./vhost.sh domain.com "www.domain.com m.domain.com" 

脚本像

sed: -e expression #1, char 31: unterminated `s' command 

消息未能我必须逃离空格字符以某种方式在替换字符串中使用它?

回答

1

只要把一对双引号围绕$alias_replace参考:

sed -i.bkp "$alias_replace" host.conf 

它应该做的伎俩。你只需要在第二次sed调用中做到这一点,但我强烈建议你引用这两个变量。

+0

我会发誓,我已经尝试过了......但它工作,谢谢! –

1
sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf 

不需要两个命令。每个需要使用双引号。

如果您愿意,您可以避开-e选项;我发现它们比替代品更清晰。