OpenWrt Shell脚本操作uci

1、什么是UCI

UCI是一个用C写的功能组件,为了集中化管理运行OpenWrt系统的设备的配置文件。UCI是在OpenWrt历史版本 White Russian 中存在的基于 NVRAM 的配置文件的替代版本和 其附带的标准配置文件程序的封装, 例如 /etc/network/interfaces, /etc/exports, /etc/dnsmasq.conf, /etc/samba/samba.conf 等。 

说白了,UCI就是为了统一应用程序的配置文件格式,方便统一用命令或者api接口去操作配置。当然应用程序原有配置保持不变,中间增加一层转换过程。

启动一个OpenWrt应用程序流程图如下:

                                     

 

2、UCI的依赖

  • libuci C语言实现的小型库

  • libuci-lua 一个为Lua写的UCI插件库,它在luci被使用

3、UCI附加包

包名描述
uci统一配置接口 (UCI) 的功能组件
libuci统一配都置接口 (UCI) 的C语言库
libuci-luaC语言库文件的LuaLua插件库, 例如 luci就用到了这个库

4、已安装的文件

路径/文件描述描述
/sbin/uci二进制文件/binaryuci 的可执行文件
/lib/config/uci.shshell脚本/Shell Script/sbin/uciShell脚本可用的封装
/lib/libuci.so符号链接/symlinklibuci.so.xxx 的符号链接
/lib/libuci.so.2011-01-19二进制文件binary

库文件

/usr/lib/lua/uci.so二进制文件/binarylua库文件

5、UCI配置文件

  • 配置路径

    /etc/config/

  • 配置文件内容(文件名class)

root@ZhouWu:/# cat  /etc/config/network 

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd78:ca3e:7361::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'lan1'
        list ports 'lan2'
        list ports 'lan3'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '10.10.18.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option device 'eth1'
        option proto 'dhcp'

config interface 'wan6'
        option device 'eth1'
        option proto 'dhcpv6'

config interface 'wwan'
        option device 'lan4'
        option proto 'dhcp'

  • uci命令操作实例

获取option值

获取list值

查看所有配置

修改option值

修改list内容(增加/删除)

6、shell api说明

  • shell api源码路径

    /lib/functions.sh

  • 主要接口列表

    config_load  

    config_get    

    config_set      

    config_foreach    

    config_list_foreach

    

7、config_get接口

  • 接口说明

用于获取option变量值

  • 接口参数

参数说明
$1  <variable>获取到的值存储变量
$2  <section>section名称
$3  <option>option名称
$4  <default>默认值
  • 接口实例

  config_get ifname_value "lan" ifname 

8、config_foreach接口

  • 接口说明

遍历指定类型的section,通过回调函数处理section

  • 接口参数

参数说明
$1  <callback>遍历callback
$2  <section type>section 类型
  • 接口实例

    handle_xxx()

    {

        local section="$1"

        #handle section

    }

    config_foreach  handle_xxx "interface"

9、实例:通过shell获取所有网卡接口名

可能通过以上接口文档,还不能直观的说明接口的用法,我写了一个实例通过shell脚本从uci网络配置中提取所有网络接口名,通过该实例可以学习config_load、config_get、config_foreach的用法,希望对大家有帮助。

  • OpenWrt系统网络配置

   配置文件路径

   /etc/config/network

   配置文件内容

config interface 'loopback'

option ifname 'lo'

option proto 'static'

option ipaddr '127.0.0.1'

option netmask '255.0.0.0'

config interface 'lan'

option type 'bridge'

option ifname 'eth0.1'

option proto 'static'

option ipaddr '192.168.166.1'

option netmask '255.255.255.0'

option ip6assign '60'

config device 'lan_dev'

option name 'eth0.1'

option macaddr '00:0c:43:76:20:d0'

config interface 'wan'

option ifname 'eth0.2'

option proto 'dhcp'

源代码

#!/bin/sh

. /lib/functions.sh

# 需要先load network配置,默认/etc/config/network

config_load network

# 每个section会调用一次

handle_intf()

{

local section="$1"

config_get ifname $section ifname

echo "interface=$ifname"

}

config_foreach  handle_intf "interface"

运行结果

interface=lo

interface=br-lan

interface=eth0.2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenWrt 是一个基于 Linux 的嵌入式操作系统,它提供了一个灵活的平台,可以在各种路由器和嵌入式设备上运行。您可以使用启动脚本来配置和定制 OpenWrt 的启动过程。 OpenWrt 使用的启动脚本是 `/etc/init.d` 目录下的脚本文件。这些脚本文件使用了类似于传统的 SysVinit 启动脚本的语法。 要创建一个启动脚本,请按照以下步骤操作: 1. 在 `/etc/init.d` 目录下创建一个新的脚本文件,例如 `myscript`。 ``` root@OpenWrt:~# cd /etc/init.d root@OpenWrt:/etc/init.d# touch myscript ``` 2. 编辑这个脚本文件并添加所需的配置和命令。您可以使用任何文本编辑器来编辑脚本文件。 ``` root@OpenWrt:/etc/init.d# vi myscript ``` 在脚本文件中,您可以编写启动、停止和重启服务、加载模块、设置环境变量等操作。 3. 添加可执行权限到脚本文件。 ``` root@OpenWrt:/etc/init.d# chmod +x myscript ``` 4. 在 `/etc/rc.d` 目录下创建一个符号链接,将脚本文件链接到适当的运行级别。 ``` root@OpenWrt:/etc/init.d# cd /etc/rc.d root@OpenWrt:/etc/rc.d# ln -s ../init.d/myscript S99myscript ``` 这将在启动时执行脚本文件。 5. 最后,您可以使用以下命令来启动、停止或重启脚本。 ``` root@OpenWrt:~# /etc/init.d/myscript start root@OpenWrt:~# /etc/init.d/myscript stop root@OpenWrt:~# /etc/init.d/myscript restart ``` 请注意,这只是一个简单的示例,您可以根据自己的需求编写更复杂的启动脚本。另外,建议您在编辑和测试脚本之前先备份相关文件,以免出现意外情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值