テンプレートを作成するための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\" "

関連情報