天天看点

UCI提供给shell和lua使用的配置接口

1、uci提供给shell使用的配置借口有两套:

1)config_get用来读取一个config值。命令格式如下:

config_getvar_name setction_name option_name <default>

var_name:    用来存放config值的变量。

settion_name:  就是section 的名字

option_name:  就是option的名字

config_get_bool的功能与config_get差不多,不过这个函数会把返回值转换成整数值。

config_set用来配置config值,命令格式如下:

config_setsection_name option_name var_name

各个字段的含义同上。在使用config_get与config_set之前,要先调用函数config_load(config_file),这个函数会把config_file载入内存。

config_foreach是针对每一个section调用一个回调函数。命令格式如下:

config_foreachcallback_func section_type <customer_val>

section_type是每一个section的类型

callback_func就是回调函数,它有2个参数,第一个是section name,如果有定义customer_val,那么第二个就是customer_val。我们可以在config_foreach里调用config_get与config_set

config_cb()这个回调函数会在调用config_load时,对每一个section调用,这个函数有两个参数,分别是section_type 与section_name。

option_cb()跟config_cb类似,不过是针对每一个option,这个函数也有两个参数,分别是option_name 与option_value.

2)uciset network.wan.proto=pppoe修改后

uci show network.wan.proto来查看。

但是这个时候用cat /etc/config/network会看到proto的值没有改,那是因为uci set只是改变内存里的值,

要写到文件,可以使用命令uci commit。

2、UCI提供给Lua脚本使用的接口如下:

在Lua中也有一组接口用来存取UCIconfig的值,使用与shell中的函数大同小异。以下就简单介绍:

X = uci.cursor() 首先要创建一个cursor X。有了这个cursor对象之后,我们就可以调用对象中的方法。

X:get(“config_file”,“section_name”, “option_name”),这个方法是用来获取option的值。

X:set(“config_file”,“section_name”, “option_name”, val),这个方法用来把val的值赋值给option_name对应的option_value

X:foreach(“config_file”,“type”, function(s) ... End) 针对某一类型的section,调用回调函数,参数s是一个table,包含所有option的值,还包括两个特殊的值:

s[‘.type’]-->section type

S[‘.name’]-->section name

其实这两套接口再这两种脚本语言中可以通用,相互调用。

现在一个问题,shell的那套接口用config_load接口加载了配置文件到内存中,用config_set等接口修改了,但是还没找到一个接口可以将内存的的这些修改过的值写到文件中。就像类似UCI commit和X:commit的作用。

详细介绍可以看链接:http://wiki.openwrt.org/doc/techref/uci#api