Groovy 快速开始


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 其他东西再学

2.5 正则表达式(todo)


文章作者: Da
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Da !
  目录