用于填写模板的 Bash 脚本

用于填写模板的 Bash 脚本

我在其他地方寻找过这个,但找不到符合我要求的东西。

下面的模板是我需要使用的模板:

dn: uid=$1,ou=home,dc=chan,dc=com

objectClass: organizationalPerson

objectClass: person

objectClass: inetOrgPerson

objectClass: top

cn: $2

sn: $3

userid: $1

userPassword:

我需要以这样的方式编写脚本,用我提供的输入填充以下字段 $1、$2、$3、$4,然后输出到一个新文件,从而允许使用空白模板运行它。

答案1

我怀疑您正在寻找一些非常简单的东西,例如my_script包含以下内容的文件:

cat <<XXX
dn: uid=$1,ou=home,dc=chan,dc=com

objectClass: organizationalPerson

objectClass: person

objectClass: inetOrgPerson

objectClass: top

cn: $2

sn: $3

userid: $1

userPassword:
XXX

要使用上面的内容,只需运行:

sh my_script fred 100 200

它将输出到标准输出(并且可以重定向到文件)。

答案2

实际上需要模板文件吗?

#!/bin/bash

echo "dn: uid=$1,ou=home,dc=chan,dc=com" > $4
echo "objectClass: organizationalPerson" >> $4
echo "objectClass: person" >> $4
echo "objectClass: inetOrgPerson" >> $4 
echo "objectClass: top" >> $4
echo "cn: $2" >> $4
echo "sn: $3" >> $4
echo "userid: $1" >> $4
echo "userPassword:" >> $4

您将运行 ./SCRIPTNAME Value1 Value2 Value3 OutputFileName

否则

你的脚本将是:

#!/bin/bash

var1=$1
var2=$2
var3=$3
file=$4

cat TemplateFile > $file

sed -i "s/1/$var1/g" $file
sed -i "s/2/$var2/g" $file
sed -i "s/3/$var3/g" $file

你的模板文件是

dn: uid=1,ou=home,dc=chan,dc=com 
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: 2
sn: 3
userid: 1
userPassword: 

答案3

我解决了类似的问题

优雅而简短的解决方案,与perl

用于perl将变量替换为其值:

export world=World beautiful=wonderful
echo 'I love you, $world! You are $beautiful.' >my_template.txt
perl -pe 's|\$([A-Za-z_]+)|$ENV{$1}|g' my_template.txt

输出:I love you, World! You are wonderful

my_template.txt可以包含前缀为 的变量$

答案4

正如所讨论的,使用eval命令也可以为我们完成这项工作这里

source $config_file
template_str=`cat "$template_file"`
eval "echo \"$template_str\" "

相关内容