首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从没有uci实用程序的shell中改进openwrt uci配置文件变量的解析?

如何从没有uci实用程序的shell中改进openwrt uci配置文件变量的解析?
EN

Stack Overflow用户
提问于 2017-06-15 12:26:45
回答 1查看 963关注 0票数 0

一些基于openwrt的叉子没有uci实用程序。我不想从它的c源构建uciuci在entware-ng-3xrepo中是不可用的。

选项卡分隔的 uci 配置文件如下所示:

代码语言:javascript
复制
# Whitelist regex strings examples
#   list    whitelist   '^10\.0\.[01]\..*$'
#   list    whitelist   '^192\.168\.1\..*$'

# RBL URLs - some (but not all) will also support http
    list    rbl 'https://sigs.interserver.net/iprbl.txt'
 list   rbl 'https://rbldata.interserver.net/ip.txt' 
 list   rbl 'https://rbldata.interserver.net/ipslim.txt' 

习语-awk博客文章https://unix.stackexchange.com/a/286794/17560的帮助下,我能够使用awk (busybox 1.24+)解析uci .conf文件:

代码语言:javascript
复制
$ awk '!(/^\t*#/) && /\trbl\t/ {print $3}' config/file.conf
'https://sigs.interserver.net/iprbl.txt'
'https://rbldata.interserver.net/ip.txt'
'https://rbldata.interserver.net/ipslim.txt'

如果要用空格(而不是制表符)捕获编辑器的缩进,一个可能的改进是直接匹配第二列的值,没有选项卡字符,如下所示:

代码语言:javascript
复制
awk '!(/^\t*#/) && $2 == "rbl" {print $3}' 

如何进一步改进uci配置文件解析?

PS请记住,该平台是一个带有busybox的路由器(没有gnu utils),用于匹配空间和制表符的[:blank:]似乎不能被busybox awk理解,entware-ng-3x包安装是可以的。

EN

回答 1

Stack Overflow用户

发布于 2018-05-20 15:36:44

UCI文件的结构使单独使用shell (包括busybox )解析它成为可能。有些脚本只是在OpenWRT中这样做。

首先定义三个shell函数,分别名为config()、list()、list()

然后,您将获取UCI文件。它将接受配置、选项、列表行,就好像它们是带有1或2个参数的shell命令一样。

例如,UCI文件"file.conf":

代码语言:javascript
复制
config myconfigtype 'myconfiginstance'
    option myoption 'myvalue'
    option otheroption 'other value'

shell脚本"uci.inc":

代码语言:javascript
复制
config() {
    echo I got a config section type $1 instance $2
    CONF="$2"
}
option() {
    echo I got an option named $1 value $2 pertaining to config $CONF
}

主外壳脚本:

代码语言:javascript
复制
#!/bin/sh
. uci.inc   # read shell library
. file.conf # parse file.conf
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44567510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档