轉自:http://m.blog.csdn.net/article/details?id=47989493
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