Lua的简单使用

发布时间 2023-11-22 15:44:33作者: 付时凡

Lua的简单使用

  1. 可直接shell调用Lua package中的某个API:

    lua -e 'require("path_to_lua_api").api_name("api_parameter")'
    

    如:

    lua -e 'require("luci.fs").api_name("api_parameter")'
    
  2. 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
    
  3. 时间的获取:

    • 使用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
      
  4. 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。

  5. lua的string库,如sub/gsub/match/gmatch

    lua的string库封装了很丰富的接口,

  6. TBD