我想读取文件并使用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
,user
等)的值。在循环中使用以读取已将整行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 文件,它是预定义的文件。请帮助解决这个问题
答案 0 :(得分:2)
您必须使用source命令,即读取和执行命令 来自当前shell上下文中的filename参数。
$cat test.sh
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"
$cat test2.sh
source test.sh
echo $cli
$./test2.sh
/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
如何使用循环(只读变量),我不建议使用此方法。我永远不会自己使用它。所以我只是为了展示一些技巧而添加这个答案 Bash使用
IFS
(internal field separator)变量运行,我们可以将其更改为=
- 它将帮助我们从配置文件中的数据中拆分变量。
IFS=" ="
while read -r name data ruser data1 pwd data2; do
declare $name=$data
if [[ $ruser != "" ]]; then
declare $ruser=$data1
declare $pwd=$data2
fi
done < test.sh
echo $file1
echo $cli
echo $file5
echo $passwd
echo $user
您可以在此处找到有关declare
的更多信息