我的bash脚本遇到了一些麻烦。我的文件末尾不起作用,但每个命令都在文件外部工作。我有两个字符串作为参数$ 1和$ 2。 $ acl_line和$ usebackend_line是数字,它们很好。
这是我的结束文件:
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"
感谢你的导师:)
答案 0 :(得分: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
做类似的事情。)
答案 1 :(得分:0)
我修复了错误。这只是权限错误,Sed创建了一些临时文件,所以我向我的用户添加权限。谢谢你的帮助!