迭代文件夹中的多个文件并分配值

迭代文件夹中的多个文件并分配值

我有一个名为 的文件夹MyProperties,它包含多个.properties文件,例如1.properties2.properties3.properties。每个文件都包含类似以下内容:

keyname=value 

我应该在此处写入什么作为属性文件中的值,以便对其进行分配或替换?如何在 bash 脚本中迭代这些并将值分配给键?

伪代码:

#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname

答案1

您可以使用sed替换文件中的值:

#!/bin/bash

new_value=5
for f_name in MyProperties/*.properties; do
     sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done

答案2

如果你确实有多个成对的文件varName=value,那么你需要做的就是来源它。因此,迭代所有.properties文件并获取每个文件的源代码:

for file in /path/to/MyProperties/*.properties; do
    . "$file"
done

现在您已经在脚本中定义了所有变量。为了显示:

$ cat foo.properties 
foo="bar"
$ echo "$foo"  ## no value

$ . ./foo.properties 
$ echo "$foo"
bar

这假设您的.properties文件有除了变量=值对之外什么都没有。进行采购时,文件的每一行都将在运行进行采购的脚本的 shell 中执行。因此,文件中的任何命令.properties也将被执行。任何有权访问的攻击者MyProperties都可以在那里添加恶意命令。因此,仅当您可以确定文件的内容时才执行此操作。

请注意,给定的内置路径.包含一个/字符(因此./foo.properties上面的内容)很重要,否则文件将在 的目录中查找,$PATH而不是在当前目录中(在 POSIX 合规模式下bash和不处于 POSIX 合规模式时,. file查找file如果在 ) 中未找到,则在当前工作目录中$PATH

相关内容