Bash - 读取配置文件并在此文件中进行更改

时间:2018-03-16 09:08:42

标签: bash awk sed readline config-files

我有这样的配置文件,例如:

# Blah blah, this is sample config file blah blah
# Something more blah blah
value1=YES
value2=something
#value3=boom
# Blah blah
valueN=4145

我想制作脚本来读取和编辑这样的配置文件。我考虑用一组配置选项创建一个菜单,然后在写一个选项后,控制台输出就像这样:

Group of funny options (pick option to change value):
1. value1=YES
2. value2=something
3. [disabled]value3=boom

在为exaple选择1后,我可以将value1从YES更改为NO或禁用并激活其他(hash unhash)以及将新变量添加到文件末尾。然后最后保存此配置文件中的所有更改。我需要使用什么提示?实际上尝试使用read line + awk来跳过#行(带空格),但我仍有问题要获取所有这些变量并在配置文件中进行更改。我将非常感谢你的帮助。

修改。

while read line 
do 
echo $line | awk '$1' != "#" && / / { print $1 $3 }' 
done < config.conf 

现在考虑这个,阅读我想要的信息。另外,我会用这样的东西来改变价值观:

sed -c -i "s/("one" *= *).*/\1$two/" config.conf 

我完全不知道如何将这些变量添加到我的脚本中并像以前一样使用它。实际上我搜索任何提示,而不是为我编写此脚本的人。我是linux脚本初学者:V

1 个答案:

答案 0 :(得分:0)

我建议弃用这种看似通用的配置程序,因为评论可能包含有关当前值的重要信息,如果值发生变化则会过时,而评论则不会。

第二个问题是,我希望,如果可以激活一个条目,也应该可以停用它。所以现在你有两个选择如何处理每个值。

第三个问题:在大多数情况下,通过值猜测类型可能有效。 YES似乎是一个布尔值,47是一个int,foobar一个名字 - 或者它是一个文件? - 但通常也可以使用更宽的类型,因此YES可以只是一个字符串或一个文件,47.3可能在47或者可能没有的情况下有效等等。

但是,对于试验和尝试,select和grep可能是一个开始:

select line in $(grep "=" sample.conf) "write" "abort"
do
    case $line in
        "write") echo write; break ;;
        "abort") echo abort; break ;;
        '#'*=*) echo activate $line;;
        *=[0-9]*) echo int value $line;;
        *=YES|NO) echo boolean value $line;;
        *) echo text value $line ;;
    esac
done

而不是回显intvalue $ line&#39;你可能会调用一个函数&#34; intconfigure&#34;只接受int值的地方。对于&#34;写&#34;,你会回写到文件,但我省略了,保留了没有赋值的注释,并且必须在正确的位置再次对它们进行排序,这不是微不足道的,给定有机会激活或停用评论。

但是请阅读shell中的select命令并尝试一下,看看你到底有多远。

如果您认为自己已经找到了可用的解决方案,请私下使用此配置文件,看看是否更喜欢使用简单的编辑器。