我在其他地方寻找过这个,但找不到符合我要求的东西。
下面的模板是我需要使用的模板:
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\" "