在BASH中读取配置文件,而不使用“源”
发布时间:2020-12-15 18:45:10 所属栏目:安全 来源:网络整理
导读:我试图读取格式如下的配置文件: USER = usernameTARGET = arrows 我意识到,如果我摆脱了空格,我可以简单的来源配置文件,但为了安全起见,我试图避免.我知道有一种方法逐行读取配置文件.我认为这个过程是这样的: 将行读入数组 过滤出以#开头的所有行 搜索数
我试图读取格式如下的配置文件:
USER = username TARGET = arrows 我意识到,如果我摆脱了空格,我可以简单的来源配置文件,但为了安全起见,我试图避免.我知道有一种方法逐行读取配置文件.我认为这个过程是这样的: >将行读入数组 之后我迷路了任何和所有的帮助将不胜感激.我已经尝试过这样的事情,没有成功: backup2.config>cat ~/1 grep '^[^#].*' | while read one two;do echo $two done 我从我发现的论坛帖子中拉出,只是不知道如何修改它,以适应我的需要,因为我是如此新的shell脚本. http://www.linuxquestions.org/questions/programming-9/bash-shell-program-read-a-configuration-file-276852/ 可以通过循环遍历两个数组来自动分配变量吗? for (( i = 0 ; i < ${#VALUE[@]} ; i++ )) do "${NAME[i]}"=VALUE[i] done echo $USER 这样调用$USER会输出“username”?上面的代码不工作,但我知道解决方案是类似的.
以下脚本会遍历输入文件中的每一行(在我的情况下为vars),并且与…匹配.如果找到等号,它将使用
Parameter Expansion从值中解析变量名称.然后它分别将每个部分存储在它自己的数组,名称和值中.
#!/bin/bash i=0 while read line; do if [[ "$line" =~ ^[^#]*= ]]; then name[i]=${line%% =*} value[i]=${line#*= } ((i++)) fi done < vars echo "total array elements: ${#name[@]}" echo "name[0]: ${name[0]}" echo "value[0]: ${value[0]}" echo "name[1]: ${name[1]}" echo "value[1]: ${value[1]}" echo "name array: ${name[@]}" echo "value array: ${value[@]}" 输入 $cat vars sdf USER = username TARGET = arrows asdf as23 产量 $./varscript total array elements: 2 name[0]: USER value[0]: username name[1]: TARGET value[1]: arrows name array: USER TARGET value array: username arrows (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |