Lua的简单使用
-
可直接shell调用Lua package中的某个API:
lua -e 'require("path_to_lua_api").api_name("api_parameter")'
如:
lua -e 'require("luci.fs").api_name("api_parameter")'
-
system arg,传递调用的参数:
arg[n]
其中n为序号,如0, 1,2,一般的,0代表调用的脚本本身,1代表第一个参数,2表示第二个,以此类推。
如:
/tmp# cat test_arg.lua #!/usr/bin/lua function main() print("arg[0] is ", arg[0]) print("arg[1] is ", arg[1]) print("arg[2] is ", arg[2]) end main()
运行后:
/tmp# lua test_arg.lua first second arg[0] is test_arg.lua arg[1] is first arg[2] is second
-
时间的获取:
-
使用os.time
local cur_time = os.time() print(cur_time)
运行结果:
1700638601
-
使用os.date
print(os.date())
结果为:
Wed Nov 22 15:36:41 2023
os.date还可以传参,控制输出格式,如:
os.date("%H:%M:%S")
或者解析时间参数:
os.date("%Y-%m-%d %H:%M:%S", cur_time)
而且已经自动根据机器的时区做了转换,非常方便。
-
使用socket这个package
local socket = require "socket" print("time:", socket.gettime())
得到结果,应该是100微秒的单位级别:
time: 1700638361.9353
-
-
lua的pair和ipair区别在于:ipairs只能遍历数字索引的元素,而pairs可以遍历所有类型的元素。
如:
local t1 = {"a", "b", "c", "d"} print("pairs") for k, v in pairs(t1) do print("k:", k) print("v:", v) end print("ipairs") for k, v in ipairs(t1) do print("k:", k) print("v:", v) end
此时因为是数字的索引,即key值为数字(integer),所以pairs和ipairs无区别。
但是如果不是数字:
local t2 = { key1 = 1, key2 = 2 } print("pairs") for k, v in pairs(t2) do print("k:", k) print("v:", v) end print("ipairs") for k, v in ipairs(t2) do print("k:", k) print("v:", v) end
可以发现ipairs无任何打印输出,即无法遍历tables。
-
lua的string库,如sub/gsub/match/gmatch
lua的string库封装了很丰富的接口,
-
TBD