OpenWrt中的LuCi和Lua一些总结
Lua、LuCi
- Lua是一种小巧的脚本语言,和Python一样,Lua脚本的运行需要Lua解释器;
- UCI(Unified Configuration Interface)是OpenWrt实现所有系统配置的一个统一接口;
- LuCi是两个项目的合体,可以实现路由的网络配置页面。
详见LuCi百度百科
LuCi工作备忘
LuCi可以使用户从网页上配置路由相关信息,还可以进行一系列的OpenWrt系统配置,比如安装软件、更改用户密码等等。
- OpenWrt的系统配置多放在了/etc/config目录下
- Lua工作和配置文件在/usr/lib/lua目录下
- LuCi工作和配置文件在/usr/lib/lua/luci目录下
- luci目录常用到的是:controller、view、以及Model目录,它们构成一个MVC管理机制:
- 系统运行时,会先从/www目录下启动luci服务,之后会扫描/usr/lib/lua/luci/controller目录下的所有.lua文件,构建整体框架
比如,如果想要在OpenWrt网页上添加一个菜单选项,就需要从controller入手,编辑OpenWrt的路由 - view文件目录下主要存放页面.htm文件
- Model文件目录下是一些lua脚本,主要是与/etc/config/下的配置文件有关
- 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")
)
- 调用系统命令:
local command = "ps -ef"
luci.sys.call(command)
- 字符串格式化
local a = string.format("%s %s", "hello", "world")
- 字符串连接
a = "123"
b = a.."456" --b="123456"
- 在命令行冲中查看一个变量的值:低版本lua
=var
, 高版本lua 直接var
- notepad++中有lua的插件,可以运行lua语句
- 调用系统命令并读取输出内容到变量
local cmd = "ls"
fh = io.popen(cmd)
strget = fh:read("*all")
fh:close()
print(strget)
(ubuntu 安装 lua -> apt install lua5.3, lua版本根据自己需求而定)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2020-07-19 vim编辑器配置