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

有幫助的網頁


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM