在 Linux 中读取属性文件



我希望能够在 Linux 中读取属性文件,请检查是否存在某些属性。如果我正在寻找的属性存在,但它们与我正在寻找的值不匹配,我想覆盖这些各自的属性。如果它们不存在,那么我想将它们写入文件。

任何Linux大师都可以帮助我解决这个问题吗?

提前感谢!

键名称也可以采用 pre1.pre2.pre3 的形式所以像pre1.pre2.pre3 = 值

以下是属性文件

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6 = 1
kernel.sysrq = 0
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.forwarding = 0
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_intvl = 5
net.ipv4.tcp_keepalive_probes = 5

我想基本上更改 tcp 的所有设置。

下面是一些可能对脚本有用的步骤:

  • 属性中是否存在 foo.bar?

if grep foo.bar a.properties ; then echo found ; else echo not found; fi

-> if测试grep的结果

  • 将属性替换为其新值

cat a.properties | sed '/foo.bar/cfoo.bar = the new value'

-> sed 使用 c 命令更改整行

看起来最后一个命令就是您所需要的:)

ps:我喜欢这些"避免抨击"的讨论:)

#!/bin/sh
ensure_value() {
    file="$1"
    property="$2"
    value="$3"
    if ! grep -q "$property" "$file"; then
        echo $property = $value >> "$file"
    else
        sed -i -e "s/^$property.*/$property = $value/g" "$file"
    fi
}
# cp props props.$(date +%s).bak
ensure_value props net.ipv6.conf.all.disable_ipv6 1
ensure_value props net.ipv4.ip_forward 1
# etc.

此脚本不安全或生产就绪!请注意,该函数ensure_value评估属性名称中的正则表达式,如果您的属性最终类似于 .* .真的,你应该使用Ansible的INI文件模块或类似的模块。

首先,我想指出,通过脚本修改属性文件可能非常危险,因此在测试时请小心。 我可以想到两个选项可以让你得到你想要的。

  1. 如果您只想要一个不会更改的默认文件,并且只想用默认文件替换您拥有的文件,那么您可以保留该文件的默认版本,并在属性文件和默认版本之间进行简单的比较。 如果文件不同,请将默认值复制到实际文件。

  2. 由于我怀疑选项 1 对您不可行,因此我会考虑在文件中进行 sed 替换。 互联网上有很多关于如何使用 sed 编辑文件的教程。

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新