读取文件并将值分配给另一个文件

读取文件并将值分配给另一个文件

我想使用 shell 脚本读取该文件并将值分配给另一个文件中的变量。

例如我的文件为“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、用户等)的值。使用 while 循环读取将整行 ( cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh") 分配给 $cli 的值。只需将字段分隔符 (=) 之后的值分配给我的变量

例子:

echo $cli 不应打印/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.shcli="/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, 设置为等号 , =。然后它读取一行并将该行分成两个变量varvaluevar被分配给第一个之前的任何内容=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包含任何 shell 活动字符,结果可能不是您想要的。

相关内容