Groovy 快速入门
官方文档:http://groovy-lang.org/install.html
一、安装配置
1.1 安装
下载二进制包
$ curl https://groovy.jfrog.io/ui/api/v1/download\?repoKey\=dist-release-local\&path\=groovy-zips%252Fapache-groovy-sdk-3.0.9.zip -o apache-groovy-sdk-3.0.9.zip
解压
$ unzip apache-groovy-sdk-3.0.9.zip -d /usr/local/
1.2 配置
配置环境变量
$ vim /etc/profile
export GROOVY_HOME=/usr/local/groovy-3.0.9
export PATH=$PATH:$M2_HOME/bin:$GROOVY_HOME/bin
刷新系统变量,检查安装版本
$ groovy -v
Groovy Version: 3.0.9 JVM: 11.0.13 Vendor: Red Hat, Inc. OS: Linux
1.3 使用
牛刀小试下~
$ groovysh
Groovy Shell (3.0.9, JVM: 11.0.13)
Type ':help' or ':h' for help.
--------------------------------
groovy:000> name="Da"
===> Da
groovy:000> "i am ${name}"
===> i am Da
二、基础语法
2.1 数据类型
2.1.1 字符串 String
字符串可以用:''
、""
、""" """
表示,示例如下:
groovy:000> name='Da'
===> Da
groovy:000> "i am ${name}"
===> i am Da
groovy:000> 'i am ${name}'
===> i am ${name}
groovy:000> """ i 'm "${name}" """
===> i 'm "Dayo"
Groovy 在引用变量时与 Shell 相似,存在强、弱引用,单引号内的字符串不会进行变量值替换
常用方法:
# 是否包含特定内容
groovy:000> "Dayo".contains('Da')
===> true
# 返回字符串的长度
groovy:000> "Dayo".size()
===> 4
# 转换类型为 int
groovy:000> '123'.toString()
===> 123
# 返回元素下标(以0开始,末尾是-1)
groovy:000> "Dayo".indexOf("0")
===> -1
groovy:000> "Dayo".indexOf("D")
===> 0
groovy:000> "Dayo".indexOf("a")
===> 1
# 判断字符串后缀
groovy:000> "example.sh".endsWith(".sh")
===> true
# 删除特定字符
groovy:000> "Dayo".minus("yo")
===> Da
# 添加特定字符
groovy:000> "Da".plus("yo")
===> Dayo
# 反转字符串
groovy:000> "Dayo".reverse()
===> oyaD
# 返回特定区间的字符串
groovy:000> "abcdefg".substring(0, 3)
===> abc
# 转换字符串为的大写字母
groovy:000> "dayo".toUpperCase()
===> DAYO
# 转换字符串为小写字母
groovy:000> "DAYO".toLowerCase()
===> dayo
# 按照特定字符对字符串进行切割,返回列表
groovy:000> "1,2,3,4,5".split(',')
===> [1, 2, 3, 4, 5]
# 加减字符串
groovy:000> "Dayo" - "yo"
===> Da
groovy:000> "Da" + "yo"
===> Dayo
2.1.2 列表 List
列表可以用:[]
表示,示例如下:
groovy:000> lst = [1,2,3]执行命令
===> [1, 2, 3]
常用方法
# 合并、删除列表
groovy:000> [1,2,3] + [4,5]
===> [1, 2, 3, 4, 5]
groovy:000> [1,2,3,4,5] - [1,2]
===> [3, 4, 5]
# += -= 赋值
groovy:000> lst = [1,2]
===> [1, 2]
groovy:000> lst += [3,4]
===> [1, 2, 3, 4]
groovy:000> lst
===> [1, 2, 3, 4]
groovy:000> lst -= [1,2]
===> [3, 4]
groovy:000> lst
===> [3, 4]
# 添加元素
groovy:000> lst = [1,2]
===> [1, 2]
groovy:000> lst.add(3)
===> true
groovy:000> lst
===> [1, 2, 3]
groovy:000> lst.add([4,5])
===> true
groovy:000> lst
===> [1, 2, 3, [4, 5]]
# 返回元素是否为空
groovy:000> [].isEmpty()
===> true
groovy:000> [1].isEmpty()
===> false
# 返回交集
groovy:000> [1,2,3].intersect([3,4,5])
===> [3]
# 是否无交集
groovy:000> [1,2,3].disjoint([4,5])
===> true
# 拉平列表元素
groovy:000> [1, 2, 3, [4, 5]].flatten()
===> [1, 2, 3, 4, 5]
# 列表元素去重
groovy:000> [1,2,2,3].unique()
===> [1, 2, 3]
# 反转列表元素
groovy:000> [1,2,2,3].reverse()
===> [3, 2, 2, 1]
# 排序列表元素
groovy:000> [7,9,2,1].sort()
===> [1, 2, 7, 9]
# 返回元素数量
groovy:000> [7,9,2,1].size()
===> 4
# 统计元素出现次数
groovy:000> [7,9,2,2,1].count(2)
===> 2
groovy:000> [7,9,2,2,1].count(1)
===> 1
groovy:000> [7,9,2,2,1].count(0)
===> 0
# 最大、最小、求和
groovy:000> [1,2,3].max()
===> 3
groovy:000> [1,2,3].min()
===> 1
groovy:000> [1,2,3].sum()
===> 6
# 是否包含特定元素
groovy:000> [1,2,3].contains(2)
===> true
groovy:000> [1,2,3].contains(4)
===> false
# 删除单个元素
groovy:000> lst = [1,2,3]
===> [1, 2, 3]
groovy:000> lst.remove(0)
===> 1
groovy:000> lst
===> [2, 3]
# 删除多个元素
groovy:000> lst.removeAll()
===> false
groovy:000> lst
===> [2, 3]
groovy:000> lst.removeAll(lst)
===> true
groovy:000> lst
===> []
# 清空列表
groovy:000> lst = [1,2,3]
===> [1, 2, 3]
groovy:000> lst.clear()
===> null
groovy:000> lst
===> []
# 拼接列表元素为字符串
groovy:000> [1,2,3].join('-')
===> 1-2-3
# 遍历列表元素
groovy:000> [1,2,3].each{
groovy:001> println("Item: ${it}")
groovy:002> }
Item: 1
Item: 2
Item: 3
===> [1, 2, 3]
2.1.3 字典 Map
列表可以用:[k:v]
表示,示例如下:
groovy:000> userinfo = ["name": "Da", "gender": "male", "age": 18]
===> [name:Da, gender:male, age:18]
常用方法
# 获取字典键值数量
groovy:000> userinfo.size()
===> 3
# 获取指定键值
groovy:000> userinfo['name']
===> Da
groovy:000> userinfo.get('age')
===> 18
# 是否为空
groovy:000> userinfo.isEmpty()
===> false
# 是否包含指定键
groovy:000> userinfo.containsKey('name')
===> true
groovy:000> userinfo.containsKey('skill')
===> false
# 是否包含指定值
groovy:000> userinfo.containsValue('Da')
===> true
groovy:000> userinfo.containsValue('Yo')
===> false
# 返回字典键列表
groovy:000> userinfo.keySet()
===> [name, gender, age]
# 返回字典值列表
groovy:000> userinfo.values()
===> [Da, male, 18]
# 返回字典键值对
groovy:000> userinfo.entrySet()
===> [name=Da, gender=male, age=18]
groovy:000> userinfo
===> [name:Da, gender:male, age:18]
# 删除特定键值
groovy:000> userinfo.remove('name')
===> Da
groovy:000> userinfo
===> [gender:male, age:18]
# 删除所有键值
groovy:000> userinfo.clear()
===> null
groovy:000> userinfo
===> [:]
# 遍历字典键值对
groovy:000> ["name": "Da", "gender": "male", "age": 18].each{ k, v -> println("键: ${k} 值:${v}")}
键: name 值:Da
键: gender 值:male
键: age 值:18
===> [name:Da, gender:male, age:18]
2.2 逻辑判断
if
语法格式:
if (表达式){
// 处理逻辑
} else if (表达式){
// 处理逻辑
} else {
// 处理逻辑
}
示例如下:
groovy:000> branch = "master"
===> master
groovy:000> if (branch == "master"){
groovy:001> println("This is from [master] branch.")
groovy:002> } else if (branch == "develop"){
groovy:003> println("This is from [develop] branch.")
groovy:004> } else {
groovy:005> println("not master/develop branch, ignore...")
groovy:006> }
This is from [master] branch.
===> null
switch
语法格式:
switch(){
case "item1":
// 处理逻辑
break; // 或者;; 前者跳过 default,后者执行 default
case "item2":
// 处理逻辑
break;
default:
# 若 case 没有 break 则执行 default 内逻辑
// 处理逻辑
}
示例如下:
groovy:000> branch = "develop"
===> develop
groovy:000> switch(branch){}
===> null
groovy:000> switch("${branch}"){
groovy:001> case "master":
groovy:002> println("This is from [master] branch.")
groovy:003> break;
groovy:004> case "develop":
groovy:005> println("This is from [develop] branch.")
groovy:006> break;
groovy:007> default:
groovy:008> println("not master/develop branch, ignore...")
groovy:009> }
This is from [develop] branch.
2.3 循环迭代
for
列表循环
语法格式:
for (<item_var> in list){
// 处理逻辑
}
示例如下:
groovy:000> lst = [1,2,3]
===> [1, 2, 3]
groovy:000> for (i in lst){
groovy:001> println("Item: ${i}")
groovy:002> }
Item: 1
Item: 2
Item: 3
===> null
字典循环
def
定义变量,用 groovy
执行脚本
示例代码
def userinfo = ["name": "Da", "gender": "male", "age": 18]
for ( e in userinfo ){
println("key = ${e.key}, value = ${e.value}")
}
执行效果
$ groovy test.groovy
key = name, value = Da
key = gender, value = male
key = age, value = 18
while
语法格式
// 表达式为 true 时运行
while (表达式){
// 处理逻辑
}
示例如下:
groovy:000> i = 0
===> 0
groovy:000> while (i < 3){
groovy:001> println("current: ${i}")
groovy:002> i++
groovy:003> }
current: 0
current: 1
current: 2
2.4 函数
基本函数
示例代码:
def GetUserInfo(name){
println("Username: ${name}")
return name
}
ret = GetUserInfo('Da')
println("函数返回:${ret}")
执行效果
$ groovy func-demo1.groovy
Username: Da
函数返回:Da
OK,先看到这里,后续用到 Groovy 其他东西再学