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版本根據自己需求而定)