シェルスクリプトを使用してファイルを読み込み、他のファイルの変数に値を割り当てたいと思います。
たとえば、私のファイルは「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つの変数var
sumに分割しますvalue
。var
最初の前の項目に割り当てられ、=
最初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
シェルアクティブ文字が含まれていると、目的の結果が出ない可能性があります。