|
|
- 使用 Lua 脚本
|
|
|
|
|
|
- 轻量级: Lua用标准C语言编写并以源代码形式开发,编译后仅仅一百余千字节,可以很方便的嵌入到其他程序中。
|
|
|
- 可扩展: Lua提供非常丰富易于使用的扩展接口和机制,由宿主语言(通常是C或C++)提供功能,Lua可以使用它们,就像内置的功能一样。
|
|
|
- 支持面向过程编程和函数式编程
|
|
|
- 应用场景
|
|
|
|
|
|
- 游戏开发、独立应用脚本、web应用脚本、扩展和数据库插件、系统安全上。
|
|
|
- 安装
|
|
|
|
|
|
- Lua的官网地址为:`https://www.lua.org`
|
|
|
- 点击download可以找到对应版本的下载地址,我们本次课程采用的是lua-5.3.5,其对应的资源链接地址为https://www.lua.org/ftp/lua-5.4.1.tar.gz,也可以使用wget命令直接下载:
|
|
|
|
|
|
```shell
|
|
|
# 下载 gz 安装包
|
|
|
wget https://www.lua.org/ftp/lua-5.4.1.tar.gz
|
|
|
|
|
|
# 安装需要的依赖
|
|
|
yum install -y readline-devel
|
|
|
|
|
|
# 编译安装
|
|
|
cd lua-5.4.1
|
|
|
make linux test
|
|
|
make install
|
|
|
|
|
|
# 验证安装
|
|
|
lua -v
|
|
|
```
|
|
|
|
|
|
- Lua的语法
|
|
|
- Lua交互式编程模式可以通过命令lua -i 或lua来启用:
|
|
|
- 脚本文件以 .lua 结尾
|
|
|
- 举例:
|
|
|
|
|
|
```shell
|
|
|
#!/usr/local/bin/lua
|
|
|
print("Hello World!!!")
|
|
|
```
|
|
|
|
|
|
- 第一行用来指定Lua解释器所在位置为 /usr/local/bin/lua,加上#号标记解释器会忽略它。
|
|
|
- 一般情况下#!就是用来指定用哪个程序来运行本文件。但是hello.lua并不是一个可执行文件,需要通过chmod来设置可执行权限,最简单的方式为:
|
|
|
|
|
|
```shell
|
|
|
chmod 755 hello.lua
|
|
|
```
|
|
|
|
|
|
- 然后执行该文件
|
|
|
|
|
|
```shell
|
|
|
./hello.lua
|
|
|
```
|
|
|
|
|
|
- 补充一点,如果想在交互式中运行脚本式的hello.lua中的内容,我们可以使用一个dofile函数,如:
|
|
|
|
|
|
```shell
|
|
|
dofile("lua_demo/hello.lua")
|
|
|
```
|
|
|
|
|
|
- 注意:在Lua语言中,连续语句之间的分隔符并不是必须的,也就是说后面不需要加分号,当然加上也不会报错,
|
|
|
- 在Lua语言中,表达式之间的换行也起不到任何作用。如以下四个写法,其实都是等效的
|
|
|
|
|
|
```txt
|
|
|
写法一
|
|
|
a=1
|
|
|
b=a+2
|
|
|
写法二
|
|
|
a=1;
|
|
|
b=a+2;
|
|
|
写法三
|
|
|
a=1; b=a+2;
|
|
|
写法四
|
|
|
a=1 b=a+2
|
|
|
```
|
|
|
|
|
|
- 不建议使用第四种方式,可读性太差。
|
|
|
|
|
|
### 1.1 Lua的注释
|
|
|
|
|
|
- 关于Lua的注释要分两种,第一种是单行注释,第二种是多行注释。
|
|
|
- 单行注释
|
|
|
|
|
|
```shell
|
|
|
--注释内容
|
|
|
```
|
|
|
|
|
|
- 多行注释
|
|
|
|
|
|
```shell
|
|
|
--[[
|
|
|
注释内容
|
|
|
注释内容
|
|
|
--]]
|
|
|
```
|
|
|
|
|
|
- 取消多行注释,只需要在第一个--之前在加一个-即可,如:
|
|
|
|
|
|
```shell
|
|
|
---[[
|
|
|
注释内容
|
|
|
注释内容
|
|
|
--]]
|
|
|
```
|
|
|
|
|
|
### 1.2 标识符
|
|
|
|
|
|
- 换句话说标识符就是我们的变量名,Lua定义变量名以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下划线,数字(0到9)。
|
|
|
- 这块建议大家最好**不要使用下划线加大写字母的标识符**,因为Lua的保留字也是这样定义的,容易发生冲突。注意Lua是区分大小写字母的。
|
|
|
|
|
|
### 1.3 关键字
|
|
|
- 下列是Lua的关键字,大家在定义常量、变量或其他用户自定义标识符都要避免使用以下这些关键字:
|
|
|
|
|
|
| 关键词 | 关键词 |
|
|
|
|----------|--------|
|
|
|
| and | break |
|
|
|
| elseif | end |
|
|
|
| function | if |
|
|
|
| nil | not |
|
|
|
| return | then |
|
|
|
| while | goto |
|
|
|
| do | else |
|
|
|
| false | for |
|
|
|
| in | local |
|
|
|
| or | repeat |
|
|
|
| true | until |
|
|
|
|
|
|
- 一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于 Lua 内部全局变量。这个也是上面我们不建议这么定义标识符的原因。
|
|
|
|
|
|
### 1.3 运算符
|
|
|
```txt
|
|
|
+ 加法
|
|
|
- 减法
|
|
|
* 乘法
|
|
|
/ 除法
|
|
|
% 取余
|
|
|
^ 乘幂
|
|
|
- 负号
|
|
|
```
|
|
|
|
|
|
---
|
|
|
```txt
|
|
|
10+20 -->30
|
|
|
20-10 -->10
|
|
|
10*20 -->200
|
|
|
20/10 -->2
|
|
|
3%2 -->1
|
|
|
10^2 -->100
|
|
|
-10 -->-10
|
|
|
|
|
|
```
|
|
|
|
|
|
- 关系运算符
|
|
|
```txt
|
|
|
== 等于
|
|
|
~= 不等于
|
|
|
> 大于
|
|
|
< 小于
|
|
|
>= 大于等于
|
|
|
<= 小于等于
|
|
|
|
|
|
```
|
|
|
- 例如:
|
|
|
|
|
|
```txt
|
|
|
10==10 -->true
|
|
|
10~=10 -->false
|
|
|
20>10 -->true
|
|
|
20<10 -->false
|
|
|
20>=10 -->true
|
|
|
20<=10 -->false
|
|
|
```
|
|
|
- 逻辑运算符
|
|
|
|
|
|
```txt
|
|
|
and 逻辑与 A and B &&
|
|
|
or 逻辑或 A or B ||
|
|
|
not 逻辑非 取反,如果为true,则返回false !
|
|
|
```
|
|
|
|
|
|
- 逻辑运算符可以作为if的判断条件,返回的结果如下:
|
|
|
|
|
|
```txt
|
|
|
A = true
|
|
|
B = true
|
|
|
|
|
|
A and B -->true
|
|
|
A or B -->true
|
|
|
not A -->false
|
|
|
|
|
|
A = true
|
|
|
B = false
|
|
|
|
|
|
A and B -->false
|
|
|
A or B -->true
|
|
|
not A -->false
|
|
|
|
|
|
A = false
|
|
|
B = true
|
|
|
|
|
|
A and B -->false
|
|
|
A or B -->true
|
|
|
not A -->true
|
|
|
```
|
|
|
|
|
|
- 其他运算符
|
|
|
|
|
|
```txt
|
|
|
.. 连接两个字符串
|
|
|
# 一元预算法,返回字符串或表的长度
|
|
|
```
|
|
|
|
|
|
- 例如:
|
|
|
|
|
|
```txt
|
|
|
> "HELLO ".."WORLD" -->HELLO WORLD
|
|
|
> #"HELLO" -->5
|
|
|
```
|
|
|
|
|
|
### 1.4 全局变量&局部变量
|
|
|
|
|
|
- 在Lua语言中,全局变量无须声明即可使用。在默认情况下,变量总是认为是全局的,如果未提前赋值,默认为nil:
|
|
|
- 要想声明一个局部变量,需要使用local来声明
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|