从配置文件中读取值并在shell脚本中使用

8

我有一个文本配置文件,类似于这样:

## COMMENT
KEY1=VALUE1  ## COMMENT
KEY2=VALUE2

KEY3=VALUE3  ## COMMENT

## COMMENT

从上面的内容可以看出,这是一个键值对的配置文件,但其中也包含注释行和空行。有时,注释会与键值对在同一行。

我该如何读取此配置文件并将键设置为shell脚本中的变量名,以便我可以使用它们:

echo $KEY1 
3个回答

12

只是:

source config.file

那么您可以在 shell 中使用这些变量。


只是出于好奇,是否可能从配置文件中动态查找键名。换句话说,“不需要在脚本中检查关键字以检索值或执行操作。只需在脚本中逐个检索键的值即可”。 - ArunRaj

8
例如,这里是您配置文件的内容:
email=test@test.com
user=test
password=test

有两种方法:
  1. use source to do it.

    source $<your_file_path>
    echo $email
    
  2. read content and then loop each line to compare to determine the correct line

    cat $<your_file_path> | while read line
    do 
      if [[$line == *"email"*]]; then
        IFS='-' read -a myarray <<< "$line"
        email=${myarray[1]}
        echo $email
      fi
    done
    
第二种解决方案的缺点是需要使用if来检查每一行。

3
在你的代码开头加入以下代码即可:

只需在代码开头引用此代码:

. file

或者

source file

只是出于好奇,是否可能从配置文件中动态查找键名。换句话说,不需要在脚本中检查关键字以检索值或执行操作。只需在脚本中逐个检索键的值即可 - ArunRaj
1
是的,你可以用 while 循环来实现。我建议你 提问,以了解许多不同的方法。 - fedorqui
1
在进行此操作时,请注意您的配置文件实际上使用shell语法来处理诸如空格之类的内容。例如,行s1="foo bar"将起作用,但是行s2=foo bar将失败,因为shell将解释它为请求运行程序bar并在环境中设置s2=foo - cjs
@CurtSampson 不错!在这里可以看到所有可能的组合 :) - fedorqui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接