ファイルを読み取り、他のファイルに値を割り当てる

ファイルを読み取り、他のファイルに値を割り当てる

シェルスクリプトを使用してファイルを読み込み、他のファイルの変数に値を割り当てたいと思います。

たとえば、私のファイルは「myconf」です。

cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"
user="rhqadmin"
passwd="janre"
file1="/opt/Solartis_Monitoring/JON_CLI/samples/agentresourceid.js"
file2="/opt/Solartis_Monitoring/JON_CLI/samples/agentresourceid"
file3="/opt/Solartis_Monitoring/JON_CLI/samples/alertresourceid.js"
file4="/opt/Solartis_Monitoring/JON_CLI/samples/alertresourceid"
file5="/opt/Solartis_Monitoring/JON_CLI/samples/alertid"

私のスクリプトは "testconf"という別のファイルにあります。

$cli -u $user -p $passwd -s $host -f $file3 > $file4

「myconf」ファイルから変数(cli、userなど)の値を取得したいと思います。 whileループを使用して、行全体(cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh")を$ cliに割り当てる値を読み取ります。私の変数にフィールド区切り文字(=)の後の値を割り当てます。

例:

echo $cli/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh 次のように印刷しないでください。cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"

「myconf」ファイルは変更できません。これは事前定義されたファイルです。この問題を解決するのに役立ちます

ベストアンサー1

慎重なアプローチ

努力する:

while IFS== read -r var value
do
    value="${value#\"}"
    [ "$var" ] && declare "$var=${value%\"}"
done <myconf
echo "$cli"

これにより、次のような出力が生成されます。

/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh

どのように動作しますか?

  • while IFS== read -r var value; do

    これでサイクルが始まります。一時的にフィールド区切りIFS記号を等号に設定します=。次に行を読み、行を2つの変数varsumに分割しますvaluevar最初の前の項目に割り当てられ、=最初valueの後の項目を取得します=

  • value="${value#\"}"

    "これにより、値から先行が削除されます。

  • [ "$var" ] && declare "$var=${value%\"}"

    空でない場合var、つまり空行を読み取っていない場合は、$var末尾が削除された値が変数に割り当てられます。${value%\"}"${value%\"}""$value

  • done <myconf

    これはループの終わりを知らせ、ファイル内のループ入力を設定しますmyconf

信頼方法

このソースファイルは次myconfのとおりです。

. myconf
echo "$cli"

これにより、次のような出力が生成されます。

/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh

この方法はファイルを実行するため、作成者をmyconf信頼する必要がありますmyconf。ファイルにmyconfシェルアクティブ文字が含まれていると、目的の結果が出ない可能性があります。

おすすめ記事