ruby之基础语法
ruby语法之哈希 =》相当于python的字典
ruby语法之数组 =》相当于python的列表
举例:
gitaly= Hash.new #建立新Hash类型
gitaly['first']="myfirst"
gitaly['storage'] = [
{
'name' => 'default',
'path' => '/tmp/path-1'
},
{
'name' => 'nfs1',
'path' => '/mnt/nfs1'
}
]
puts gitaly #{"first"=>"myfirst", "storage"=>[{"name"=>"default", "path"=>"/tmp/path-1"}, {"name"=>"nfs1", "path"=>"/mnt/nfs1"}]}
puts gitaly.keys #first storage
puts gitaly['storage'][0] #{"name"=>"default", "path"=>"/tmp/path-1"}
puts gitaly['storage'][-1] #{"name"=>"nfs1", "path"=>"/mnt/nfs1"}
puts gitaly.size # test=[] #新的空的数组类型
test[0]="a"
test[1]='k'
puts test # a k 数组的增:
test << "b" #["a","k","b"]
test.push("b") #数组尾部增加元素
test.xshift("b") #头部增加元素
数组的删:
test.pop #后面不加元素,依次从尾部删除一个元素
test.shift #后面不加元素,依次从头部删除一个元素
test.delete("a") #删除元素a ,有多个a都删除
test.delete_at(2) #删除某个索引位置的元素
数组的去重:bb=test.uniq #不改变test的值,改变原数组用uniq!
数组变成字符串:kk=["a","b","a"];bb=kk.join("-") # a-b-a 使用某个符合连接,可以是多个字符
将字符串变成数组:kk="abcd";bb=kk.split(//) #【"a","b","c","d"】
数组的排序:kk=["a","b","a"];bb=kk.sort;puts bb # a a b
查看数据的类型
aa='aa'
puts aa.class
ruby语法之处理字符串
puts aa 改
aa='hello world'
aa['hello']='first' #匹配第一个符合条件的字符串,区别python的字符串
puts aa #first world
puts aa.class #string aa='hello world'
aa[0..4]='first'
puts aa #first world
puts aa.class #string aa='hello world hello'
aa.gsub('hello','first') #替换所有符合条件的字符串
puts aa #hello world hello
puts aa.class #string aa='hello world'
aa.insert 5,' my' #在指定位置插入字符串
puts aa #hello my world
puts aa.class #string
增
kk='abc'
kk<<'def' #用来拼接字符串
puts kk #abcdef 删
#chomp和chomp!的区别是 chomp!会改变原字符串
aa='hello world!'
aa.chop! #删除最后一个字符,改变了原字符串,使用chop不会改变原来的字符串
puts aa # hello world
puts aa.class #string #删除尾部指定单个字符或者字符串
aa="hellohello"
bb=aa.chomp!("o") #或者 bb=aa.chomp!("llo"),但是里面如果是he的话,bb就是空值,aa不变
puts aa #hellohell
puts bb #hellohell
#删除开头第一个字符
str[0]=""
#删除结尾最后一个字符
str[-1]=""
#使用delete方法删除指定字符串,deleteh和delete!区别和chomp类似
puts "hello".delete "abcdefghijkl" #o #tr和tr! 修改成对应的字符,一个一个比对,没有则替换成前面一个替换的字母
"hello".tr!("lexyz","pi") #hippo
hello".tr("lho","km") #mekko -> l替换成k h替换成m,o也替换成m
#到这里发现tr命令很强大啊,那么可以用它来删除了
hellohello".tr("lh","") #eoeo
ruby插件之json将字符串转化成哈希
#!/usr/bin/ruby require 'json'
aa="{\"a\":\"1\",\"b\":\"2\"}" #字符串,json里面没有单引号
bb=JSON.parse(aa) #使用json进行转化
puts bb.class #类型变为Hash
puts bb["c"] #没有不报错,但是为空
puts bb["a"] # 1
puts bb # {"a"=>"1", "b"=>"2"}
ruby读入文件 IO.readlines
[root@orl11-infa ~]# cat test1.rb
#!/usr/bin/ruby arr=IO.readlines("tt.txt")
puts arr.class
puts arr
puts "------------------------"
puts arr[0]
[root@orl11-infa ~]# vim test1.rb
[root@orl11-infa ~]# ruby test1.rb #运行结果
Array #变成数组类型
1 first line
2 second line
------------------------
1 first line
ruby之写入文件
#先清空后写入
#!/usr/bin/ruby
File.open("r2.txt", "w+") do |file|
file.puts "haha"
file.puts "heihei"
file.close()
end #后面追加
File.open("r2.txt", "a+") do |file|
file.puts "haha"
file.puts "heihei"
file.close()
end
ruby之打印文件的绝对路径
puts File.expand_path("r2.txt")
ruby之修改文件的权限
[root@orl11-infa ~]# cat test1.rb
#!/usr/bin/ruby
file=File.new("tt.txt","w")
file.chmod(0755)
[root@orl11-infa ~]# ll tt.txt
-rw-r--r-- 1 root root 27 10月 28 16:22 tt.txt
[root@orl11-infa ~]# ruby test1.rb
[root@orl11-infa ~]# ll tt.txt
-rwxr-xr-x 1 root root 0 10月 28 16:27 tt.txt
ruby语法之判断if
x=1
if x > 2
puts "x 大于 2"
elsif x <= 2 and x!=0
puts "x 是 1"
else
puts "无法得知 x 的值"
end
其他:对当前条件不做处理,使用next
ruby语法之循环
for i in 0..5
puts "局部变量的值为 #{i}"
end
ruby语法:循环each
[root@orl11-infa ~]# cat test2.rb
#!/usr/bin/ruby aa=['awk','block','cd']
aa.each do |temp|
if temp.include? 'c'
puts temp
end
end
[root@orl11-infa ~]# ruby test2.rb
block
cd
举例:根据之前logstash处理季度和search_name的问题现在完全可以用ruby语法处理
if "cdpTest" in [tags]{
grok {
match => { "message" => "\|%{DATA:userName}\|%{DATA:opreteTimeStamp}\|%{DATA:year}-%{DATA:month}-%{DATA:day} %{DATA:hour}:%{DATA:other}\|%{DATA:deviceModel}\|%{DATA:pageName}\|%{DATA:elementName}\|%{DATA:params}\|%{DATA:appKey}\|%{DATA:ssoSource}\|%{DATA:logType}\|" }
}
ruby {
code => "
bb=event.get('[month]').to_i
bb=(bb+2)/3
cc=(bb.to_s)<<'季度'
event.set('quarter',cc)
aa=event.get('[params]')
require 'json'
dd=JSON.parse(aa)
if dd['search_name']
event.set('search_name',dd['search_name'])
end
"
remove_field => [ "message" ]
}
}
}
ruby语法之计算昨天的日期
#!/usr/bin/ruby
require 'date'
day=Time.now
puts day.strftime("%Y%m%d")
day1=Date.new(day.year,day.month,day.day)
day1=(day1 - 1).strftime("%Y%m%d")
puts "昨天的日期:#{day1}"
str="hhh_v"<<day1
puts str
[root@orl11-infa ~]# ruby data.rb
20191028
昨天的日期:20191027
hhh_v20191027
到了这里,我们就会想ruby语言和shell的交互
方式一:exec 取代当前进程,不产生子进程,它执行成功后,它后面的命令不会执行
exec "curl -XGET --user elastic:pass 'http://192.168.137.10:9200/_cat/indices' >rb1.txt"
方式二:使用反引号 ``,产生子进程,后面的命令可以执行
`curl -XGET --user elastic:pass 'http://192.168.137.10:9200/_cat/indices' >rb1.txt`
方式三:使用system,产生子进程,后面的命令会执行,返回命令执行的结果(true或者false)
cmd=system "curl -XGET --user elastic:pass 'http://192.168.137.10:9200/_cat/indices' >rb1.txt"
puts cmd #true
if cmd
puts 'success'
else
puts "failure"
end
方式四:使用%x,后面的命令会执行
%x(for i in `seq 1 5`;do echo $i;done)
%x(echo "hello";echo "haha")
其他:
ruby脚本的后缀 .rb
变量放入""里面时,puts "#{kk}"
字符串转化成整形:.to_i
整形转化成字符串:.to_s
导入模块:require 'json'
ruby脚本的语法检查:ruby -c 脚本
ruby在linux命令行中执行:ruby -e 'aa="abc";if aa.include? "b";puts "ok";else "no";end'
对命令取反,使用:!(正常命令),例如满足不包括的条件 !(bb.include? temp)
字符串以什么开头:str.start_with("a")
特殊符号:\t tab键 \s 空格 \n换行 \r回车
跳出当前循环:next
退出整个循环:break
在linux的shell中输入 irb 进入ruby的语言环境,类似于输入python进入python环境
查看元素类型:puts a.class
ruby之基础语法的更多相关文章
- ruby基础语法
首发:个人博客,更新&纠错&回复 学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}. 这种事情毫无技术含量又毫无乐趣可言,但极 ...
- 动静结合?Ruby 和 Java 的基础语法比较(入门篇)
前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...
- Sass的使用和基础语法
sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
- Python学习笔记(Ⅰ)——Python程序结构与基础语法
作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...
- python基础语法及知识点总结
本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...
- C#基础语法,快速上収C#
C#代码基础语法 对新手的帮助很大,可以尝试多看看然后在敲敲 // 单行注释以 // 开始 /* 多行注释是这样的 */ /// <summary> /// XML文档注释 /// < ...
- 3-Perl 基础语法
Perl 基础语法Perl借用了C.sed.awk.shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点.Perl 程序有声明与语句组成,程序自上而下执行,包含了循环,条件 ...
- Python语言学习前提:基础语法
一.变量 1.变量:存储数据.存储数据需要对应内存空间,基于变量的数据类型,解释器会分配指定内存,决定什么数据被存储到内存中. 变量数据类型:整数.小数.字符. 2.变量赋值:变量在使用前必须赋值,赋 ...
随机推荐
- jquery自带的排序方法(js也是)
jquery.sort() js.sort() <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- 【leetcode】1022. Sum of Root To Leaf Binary Numbers
题目如下: Given a binary tree, each node has value 0 or 1. Each root-to-leaf path represents a binary n ...
- QT--控件屏蔽鼠标点击事件
源博客:https://blog.csdn.net/qiufenpeng/article/details/81745266 最近学习QT写一个小界面想屏蔽鼠标点击,原来只要一个函数就搞定了. ui-& ...
- 初识java-1.Java跨平台的原理
计算机只认识二进制的机器指令,而且不同的平台的计算机的机器指令不同.Java中将程序员编写的源码文件编译成字节码文件,在不同的计算机平台上安装不同的虚拟机,虚拟机将同一份字节码文件解释为不同的机器指令 ...
- SQL Server 2008性能故障排查(三)——IO
接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完全加载到物理内存中,否则SQLServer会不断地把数据库文件从缓 ...
- 【Java】遍历Map<String,String>
Map<String, String> map = new HashMap<>(); map.put("key1", "value1") ...
- python数据分析中常用的库
Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性,这里就为大家分享几个不错的数据分析工具,需要的朋友可以参考下 Pyth ...
- Nginx允许跨域访问的配置问题
网站项目动静分离,静态资源服务器A 业务服务器B B中静态资源由A加载 出现如下问题: @font-face { font-family: 'iconfont'; src: url('../font ...
- 《单词的减法》state1~state17(200p)
单词的减法 2016.05.18 state 1 absent accessible accordingly accuracy/accurate acquaint/acquaintance adequ ...
- idea新手教程 如何springmvc创建Maven项目
1.点击Create project,选择maven,勾选Create from archetype选择web-app,如图 2 输入 Group-Id //组织名,也是作者名 Arti ...