OpenWrt中的LuCi和Lua一些总结

Lua、LuCi

  1. Lua是一种小巧的脚本语言,和Python一样,Lua脚本的运行需要Lua解释器;
  2. UCI(Unified Configuration Interface)是OpenWrt实现所有系统配置的一个统一接口;
  3. LuCi是两个项目的合体,可以实现路由的网络配置页面。

    详见LuCi百度百科

LuCi工作备忘

LuCi可以使用户从网页上配置路由相关信息,还可以进行一系列的OpenWrt系统配置,比如安装软件、更改用户密码等等。

  1. OpenWrt的系统配置多放在了/etc/config目录下
  2. Lua工作和配置文件在/usr/lib/lua目录下
  3. LuCi工作和配置文件在/usr/lib/lua/luci目录下
  4. luci目录常用到的是:controller、view、以及Model目录,它们构成一个MVC管理机制:
  5. 系统运行时,会先从/www目录下启动luci服务,之后会扫描/usr/lib/lua/luci/controller目录下的所有.lua文件,构建整体框架

    比如,如果想要在OpenWrt网页上添加一个菜单选项,就需要从controller入手,编辑OpenWrt的路由

  6. view文件目录下主要存放页面.htm文件
  7. Model文件目录下是一些lua脚本,主要是与/etc/config/下的配置文件有关
  8. LuCi的和python的flask框架有点相似,也可以在view目录下的htm文件中嵌入lua脚本,嵌入规则是:
<% lua code %> //lua代码直接写入

<%=lua variable %> //代入lua的变量的值

<%: string %> //直接显示在网页的字符串

<%- lua header file -%> //lua的头文件

<%+ include other htm file %> //将其它的htm文件添加进来

参考htm插入lua脚本规则

9. lua中的if..elseif..else格式:

if(条件语句)
then
--[ 语句块--]
elseif(条件语句)
then
--[语句块--]
else
--[语句块--]
end

其中最后一个else以及end一定不要忘记,尤其是最后一个else,即使语句块是空的也要把else加上,不然会报错

10. lua中的变量默认是全局变量,如果想要定义局部变量需要添加local,如local a = 1

11. 网页向服务器传数据的方式和flask非常像,需要先在controller文件夹下的lua脚本中使用Entry()绑定url和其对应的处理函数,lua向htm中传参可以使用luci.template.render(html网页位置,传递的参数),相应的htm中可以直接使用传递过去的参数,无需定义;

12. 网页重定向:

luci.http.redirect(
    luci.dispatcher.build_url("admin", "network", "iptables")
)
  1. 调用系统命令:
local command =  "ps -ef"
luci.sys.call(command)
  1. 字符串格式化
local a = string.format("%s %s", "hello", "world")
  1. 字符串连接
a = "123"
b = a.."456" --b="123456"
  1. 在命令行冲中查看一个变量的值:低版本lua =var, 高版本lua 直接var
  2. notepad++中有lua的插件,可以运行lua语句
  3. 调用系统命令并读取输出内容到变量
local cmd = "ls"
fh = io.popen(cmd)
strget = fh:read("*all")
fh:close()
print(strget)

(ubuntu 安装 lua -> apt install lua5.3, lua版本根据自己需求而定)

有帮助的网页