我有一个名为 的文件夹MyProperties
,它包含多个.properties
文件,例如1.properties
、2.properties
等3.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
。