【问题标题】:Read the file and assign values to another file读取文件并将值分配给另一个文件
【发布时间】:2016-11-02 01:29:08
【问题描述】:

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

例子:

回声$cli 应该打印 /opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
不像 cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"

我无法更改 myconf 文件,它是预定义的。请帮忙解决这个问题

【问题讨论】:

    标签: bash shell sh


    【解决方案1】:

    你必须使用source命令,它读取和执行命令 来自当前 shell 上下文中的文件名参数。

    $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的信息

    【讨论】:

    • 谢谢Arseniy。它工作..只是想确认一下,所以它会调用所有命令,从文件到我正在执行脚本的shell的变量 rit??有没有其他选项可以像使用while循环一样做到这一点??
    • Arseniy,但它不会将值分配给变量 rit。例如,如果我想将 conf 文件中的 passwd="janre" 分配给使用变量 passwd 的脚本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多