本帖最后由 bandgear 于 2014-9-5 10:20 编辑
脚本配置 加载 为了加载UCI配置文件,你需要包含常见函数: . /lib/functions.sh 然后你可以使用config_load name来加载配置文件。 此函数首先会把name当做是绝对文件名并后退到/etc/config/进行加载。 如果你想对节段或选项使用特殊回调的话,你需要重新定义以下描述的shell函数,并且是在运行config_load之前,/etc/functions.sh之后。 Callbacks 在句法分析过程中,每次遇到UCI节段标题时都会调用config_cb过程。 当被调用时,此过程就会接收到两个参数: 1. TYPE,节段类型 2. NAME,节段名称 config_cb() { local type="$1" local name="$2" # commands to be run for every section } 与config_cb相似,每次遇到UCI选项时都会调用option_cb过程。 当被调用时,此进程会接收两个参数: 1. NAME,选项名称 2. VALUE,选项值 option_cb() { local name="$1" local value="$2" # commands to be run for every option } 你可以基于节段类型将config_cb更改为option_cb。它可以使你能够依据它们的类型逐一处理单独的config节段。 Iterating 基于语句分析的callback的变换方法是用config_foreach过程迭代配置节段。 Config_foreach过程至少需要一个参数: 1. Function,为每个遇到的节段而调用的预先定义的程序名称 2. Type,只迭代已给类型的节段,跳过其它的。 3. Additional arguments,所有以下参数都按原样传递给回调程序 在以下示例中,每个config interface节段都会在/etc/config/network调用handle_interface过程。Test字符串会被做为第二个参数在每个调用中进行传送。 handle_interface() { local config="$1" local custom="$2" # run commands for every interface section } config_load network config_foreach handle_interface interface test 也可以通过return一个非零值在callback内部取消迭代。 在每个节段回调内,config_get或config_set过程也许是用来读取或设置属于当前进程段的值。 读取选项 Config_get过程至少需要三个参数: 1. 用以保存恢复值的可变名称 2. 读取数值的节段ID 3. 读取数值的选项名称 4. 默认,如果选项未设置数值会返回 … # read the value of "option ifname" into the "iface" variable # $config contains the ID of the current section local iface config_get iface "$config" ifname echo "Interface name is $iface" … 设置选项 Config_set过程需要三个参数: 1. 设置选项的节段ID 2. 分配数值的选项名称 3. 分配的数值 … # set the value of "option auto" to "0" # $config contains the ID of the current section config_set "$config" auto 0 … 需要注意的是用config_set更改的数值只保存在内存中。随后调用config_get将会返回被更新的数值。如果你想改变数值,使用/lib/config/uci.sh中的uci_*函数,此函数会自动包括在/etc/fuctions.sh中。 直接存取 如果预先知道配置节段的名称,便宜可以直接读取选项而无须使用节段迭代程序回调。 以下示例是从“config interface”节段读取“option proto”。 … local proto config_get proto wan proto echo "Current WAN protocol is $proto" …
欢迎大家提出自己的想法和意见,可以以回复的形式提出,或者加入我的QQ群大家一起交流,互相学习。
名 称:openwrt开发
群 号: 278691630、331230369 、318937037、208461032 |