我想使用 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.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
, 设置为等号 ,=
。然后它读取一行并将该行分成两个变量var
和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
包含任何 shell 活动字符,结果可能不是您想要的。