2016-10-12 96 views
0

我的bash脚本有些麻烦。我的文件结尾不起作用,但每个命令都在文件外部工作。我有两个字符串作为参数$ 1和$ 2。 $ acl_line和$ usebackend_line是数字,它们很好。Bash脚本 - 某些命令在sh文件中不起作用

这是我的最终文件:

sed -i "$((acl_line+1))i \ \tacl\t\t is_$2_$1\t\thdr_com(host)\t-i $2.$1" /my_doc/haproxy/haproxy.cfg 
sed -i "$((usebackend_line+1))i \ \tuse_backend\t$2_$1\tif is_$2_$1" /my_doc/haproxy/haproxy.cfg 
echo -en "\nbackend $2_$1\n\tserver $2_$1 163.172.167.52:$3 maxconn 1024" >> /my_doc/haproxy/haproxy.cfg 

cp -r "./model/*" "./script/lp_domains/$1/$2/" 
sed -i 's/lp_ports/$ports/g' "./script/lp_domains/$1/$2/my_doc.yml" 
sed -i 's/lp_name/$2-$1/g' "./script/lp_domains/$1/$2/my_doc.yml" 

感谢您的anwsers :)

+0

在最后两个sed命令中,'$ ports'和'$ 2- $ 1'需要替换为bash变量或'$'实际上是替换字符串的一部分? – Sundeep

回答

1

如果$1$2应插,你不能使用单引号。

此外,复制文件,然后在其上运行sed -i是浪费和容易出错的。只需运行sed并同时进行替换。

sed -i -e "$((acl_line+1))i \ \tacl\t\t is_$2_$1\t\thdr_com(host)\t-i $2.$1" \ 
    -e "$((usebackend_line+1))i \ \tuse_backend\t$2_$1\tif is_$2_$1" /my_doc/haproxy/haproxy.cfg \ 
    -e "\$a\ 
backend $2_$1\n\tserver $2_$1 163.172.167.52:$3 maxconn 1024" /my_doc/haproxy/haproxy.cfg 

# remove ./model/my_doc.yml; instead have a template ./my_doc.yml.in 
cp -r "./model/*" "./script/lp_domains/$1/$2/" 
sed -e "s/lp_ports/$ports/g" -e "s/lp_name/$2-$1/g" \ 
    my_doc.yml.in >"./script/lp_domains/$1/$2/my_doc.yml" 

(你或许应该做haproxy.cfg.in其实类似的东西。)

0

我有固定我的错误。这只是权限错误,Sed创建一些临时文件,所以我向用户添加权限。谢谢你的帮助 !