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

时间:2016-06-30 05:46:22

标签: bash shell sh

我想读取文件并使用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 文件中获取变量(cliuser等)的值。在循环中使用以读取已将整行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 个答案:

答案 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

的更多信息