将变量从Shell脚本传递到配置文件

时间:2020-03-04 09:19:21

标签: linux bash shell

我必须编写一个Shell脚本来动态安装多个服务。我对shell脚本或unix shell通用知识不太了解,所以我确实需要一些帮助。这是我的外壳文件。

#!/bin/bash
# Ask the user for their name
echo What is the name of your domain?
read varname

echo You passed the domain name to your domain $varname successfully

这是我的nginx.conf文件。

server {
  listen                80;
  server_name           $varname;
  rewrite     ^(.*)     https://$server_name$1 permanent;
}

我想将varname传递给nginx.conf文件,以根据用户输入来设置服务器名称。我该怎么办?

3 个答案:

答案 0 :(得分:1)

能否请您尝试以下。这将从在线开始更改行上的值,该行具有server_name的最后一个字段,由用户提供。

#!/bin/bash
# Ask the user for their name
echo What is the name of your domain?
read varname

awk -v var="$varname" '/^ +server_name/{$NF=var} 1' nginx.conf > temp && mv temp nginx.conf &&\
echo You passed the domain name to your domain $varname successfully

答案 1 :(得分:1)

您可以从heredoc创建文件nginx.conf

#!/bin/bash
# Ask the user for their name
echo What is the name of your domain?
read varname

cat > nginx.conf <<EOF
server {
  listen                80;
  server_name           $varname;
  rewrite     ^(.*)     https://\$server_name\$1 permanent;
}
EOF

echo You passed the domain name to your domain $varname successfully

注意:在rewrite行中,我对$字符进行了转义,以在输出中获取文字$,而不是在shell变量中进行扩展。

如果我输入foobar,将得到一个文件nginx.conf,如下所示:

server {
  listen                80;
  server_name           foobar;
  rewrite     ^(.*)     https://$server_name$1 permanent;
}

答案 2 :(得分:1)

您可以为此使用blurfilter.blurRadiusInPixels

envsubst重命名为nginx.conf,并将脚本更改为:

nginx.conf.template