ruby语法之哈希 =》相当于python的字典

ruby语法之数组 =》相当于python的列表

举例:

  1. gitaly= Hash.new #建立新Hash类型
  2. gitaly['first']="myfirst"
  3. gitaly['storage'] = [
  4. {
  5. 'name' => 'default',
  6. 'path' => '/tmp/path-1'
  7. },
  8. {
  9. 'name' => 'nfs1',
  10. 'path' => '/mnt/nfs1'
  11. }
  12. ]
  13. puts gitaly #{"first"=>"myfirst", "storage"=>[{"name"=>"default", "path"=>"/tmp/path-1"}, {"name"=>"nfs1", "path"=>"/mnt/nfs1"}]}
  14. puts gitaly.keys #first storage
  15. puts gitaly['storage'][0] #{"name"=>"default", "path"=>"/tmp/path-1"}
  16. puts gitaly['storage'][-1] #{"name"=>"nfs1", "path"=>"/mnt/nfs1"}
  17. puts gitaly.size #
  18.  
  19. test=[] #新的空的数组类型
  20. test[0]="a"
  21. test[1]='k'
  22. puts test # a k
  23.  
  24. 数组的增:
    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

查看数据的类型

  1. aa='aa'
  2. puts aa.class

ruby语法之处理字符串

  1. puts aa

  2. aa='hello world'
  3. aa['hello']='first' #匹配第一个符合条件的字符串,区别python的字符串
  4. puts aa #first world
  5. puts aa.class #string
  6. aa='hello world'
  7. aa[0..4]='first'
  8. puts aa #first world
  9. puts aa.class #string
  10. aa='hello world hello'
  11. aa.gsub('hello','first') #替换所有符合条件的字符串
  12. puts aa #hello world hello
  13. puts aa.class #string
  14. aa='hello world'
  15. aa.insert 5,' my' #在指定位置插入字符串
  16. puts aa #hello my world
  17. puts aa.class #string
  18.  


  19. kk='abc'
  20. kk<<'def' #用来拼接字符串
  21. puts kk #abcdef

  1. #chomp和chomp!的区别是 chomp!会改变原字符串
    aa='hello world!'
  2. aa.chop! #删除最后一个字符,改变了原字符串,使用chop不会改变原来的字符串
  3. puts aa # hello world
  4. puts aa.class #string
  5.  
  6. #删除尾部指定单个字符或者字符串

aa="hellohello"
  bb=aa.chomp!("o") #或者 bb=aa.chomp!("llo"),但是里面如果是he的话,bb就是空值,aa不变

puts aa    #hellohell
  puts bb    #hellohell

  1. #删除开头第一个字符
    str[0]=""
    #删除结尾最后一个字符
    str[-1]=""

    #使用delete方法删除指定字符串,deleteh和delete!区别和chomp类似
    puts "hello".delete "abcdefghijkl" #o
  2.  
  3. #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将字符串转化成哈希

  1. #!/usr/bin/ruby
  2.  
  3. require 'json'
  4. aa="{\"a\":\"1\",\"b\":\"2\"}" #字符串,json里面没有单引号
  5. bb=JSON.parse(aa) #使用json进行转化
  6. puts bb.class #类型变为Hash
  7. puts bb["c"] #没有不报错,但是为空
  8. puts bb["a"] # 1
  9. puts bb # {"a"=>"1", "b"=>"2"}

ruby读入文件 IO.readlines

  1. [root@orl11-infa ~]# cat test1.rb
  2. #!/usr/bin/ruby
  3.  
  4. arr=IO.readlines("tt.txt")
    puts arr.class
  5. puts arr
  6. puts "------------------------"
  7. puts arr[0]
  8. [root@orl11-infa ~]# vim test1.rb
  9. [root@orl11-infa ~]# ruby test1.rb #运行结果
  10. Array #变成数组类型
  11. 1 first line
  12. 2 second line
  13. ------------------------
  14. 1 first line

ruby之写入文件

  1. #先清空后写入
  2. #!/usr/bin/ruby
  3. File.open("r2.txt", "w+") do |file|
  4. file.puts "haha"
  5. file.puts "heihei"
  6. file.close()
  7. end
  8.  
  9. #后面追加
  10. File.open("r2.txt", "a+") do |file|
  11. file.puts "haha"
  12. file.puts "heihei"
  13. file.close()
  14. end

ruby之打印文件的绝对路径

  1. puts File.expand_path("r2.txt")

ruby之修改文件的权限

  1. [root@orl11-infa ~]# cat test1.rb
  2. #!/usr/bin/ruby
  3. file=File.new("tt.txt","w")
  4. file.chmod(0755)
  5. [root@orl11-infa ~]# ll tt.txt
  6. -rw-r--r-- 1 root root 27 10 28 16:22 tt.txt
  7. [root@orl11-infa ~]# ruby test1.rb
  8. [root@orl11-infa ~]# ll tt.txt
  9. -rwxr-xr-x 1 root root 0 10 28 16:27 tt.txt

ruby语法之判断if

  1. x=1
  2. if x > 2
  3. puts "x 大于 2"
  4. elsif x <= 2 and x!=0
  5. puts "x 是 1"
  6. else
  7. puts "无法得知 x 的值"
  8. end
    其他:对当前条件不做处理,使用next

ruby语法之循环

  1. for i in 0..5
  2. puts "局部变量的值为 #{i}"
  3. end

ruby语法:循环each

  1. [root@orl11-infa ~]# cat test2.rb
  2. #!/usr/bin/ruby
  3.  
  4. aa=['awk','block','cd']
  5. aa.each do |temp|
  6. if temp.include? 'c'
  7. puts temp
  8. end
  9. end

[root@orl11-infa ~]# ruby test2.rb
block
cd

举例:根据之前logstash处理季度和search_name的问题现在完全可以用ruby语法处理

  1. if "cdpTest" in [tags]{
  2. grok {
  3. 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}\|" }
  4. }
  5. ruby {
  6. code => "
  7. bb=event.get('[month]').to_i
  8. bb=(bb+2)/3
  9. cc=(bb.to_s)<<'季度'
  10. event.set('quarter',cc)
  11. aa=event.get('[params]')
  12. require 'json'
  13. dd=JSON.parse(aa)
  14. if dd['search_name']
  15. event.set('search_name',dd['search_name'])
  16. end
  17. "
  18. remove_field => [ "message" ]
  19. }
  20. }
  21. }

ruby语法之计算昨天的日期

  1. #!/usr/bin/ruby
  2. require 'date'
  3. day=Time.now
  4. puts day.strftime("%Y%m%d")
  5. day1=Date.new(day.year,day.month,day.day)
  6. day1=(day1 - 1).strftime("%Y%m%d")
  7. puts "昨天的日期:#{day1}"
  8. str="hhh_v"<<day1
  9. puts str

[root@orl11-infa ~]# ruby data.rb
20191028
昨天的日期:20191027
hhh_v20191027

到了这里,我们就会想ruby语言和shell的交互

  1. 方式一:exec 取代当前进程,不产生子进程,它执行成功后,它后面的命令不会执行
  2. 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")

其他:

  1. ruby脚本的后缀 .rb
  2. 变量放入""里面时,puts "#{kk}"
    字符串转化成整形:.to_i
    整形转化成字符串:.to_s
    导入模块:require 'json'
    ruby脚本的语法检查:ruby -c 脚本
    rubylinux命令行中执行: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
    linuxshell中输入 irb 进入ruby的语言环境,类似于输入python进入python环境
    查看元素类型:puts a.class

ruby之基础语法的更多相关文章

  1. ruby基础语法

    首发:个人博客,更新&纠错&回复 学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}. 这种事情毫无技术含量又毫无乐趣可言,但极 ...

  2. 动静结合?Ruby 和 Java 的基础语法比较(入门篇)

    前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...

  3. Sass的使用和基础语法

    sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...

  4. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

  5. Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  6. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

  7. C#基础语法,快速上収C#

    C#代码基础语法 对新手的帮助很大,可以尝试多看看然后在敲敲 // 单行注释以 // 开始 /* 多行注释是这样的 */ /// <summary> /// XML文档注释 /// < ...

  8. 3-Perl 基础语法

    Perl 基础语法Perl借用了C.sed.awk.shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点.Perl 程序有声明与语句组成,程序自上而下执行,包含了循环,条件 ...

  9. Python语言学习前提:基础语法

    一.变量 1.变量:存储数据.存储数据需要对应内存空间,基于变量的数据类型,解释器会分配指定内存,决定什么数据被存储到内存中. 变量数据类型:整数.小数.字符. 2.变量赋值:变量在使用前必须赋值,赋 ...

随机推荐

  1. threeJS射线拾取机制及案例

    前言 在浏览器中浏览三维图形的时候,有时想要与三维图形之间做一些点击事件和交互操作,其中比较常用的一个解决方案就是使用Raycaster对象来实现(射线拾取). 基础知识 世界坐标系:webGL中,世 ...

  2. postman-Runner

    postman Runner配置 preview查看参数

  3. Linux任务计划at

    Linux任务计划at 一Linux任务计划介绍 Linux任务计划.周期性任务执行at:未来的某时间点执行一次任务batch:系统自行选择空闲时间去执行此处指定的任务cron:周期性运行某任务 二a ...

  4. 图与例解读Async/Await

    JavaScript ES7的async/await语法让异步promise操作起来更方便.如果你需要从多个数据库或者接口按顺序异步获取数据,你可能最终写出一坨纠缠不清的promise与回调.然而使用 ...

  5. 【HDOJ6578】Blank(DP)

    题意:一个长为n的序列,每个位置上的值是0,1,2,3中的一个,有m个限制条件,限制位置[l[i],r[i]]中不同的数值有x[i]个,问方案数MOD 998244353 n<=100,m< ...

  6. PHP之面向对象小结

    PHP 中创建对象 类创建后,我们可以使用 new 运算符来实例化该类的对象: $runoob = new Site; PHP 构造函数 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, ...

  7. ! Failed at the chromedriver@2.35.0 install script.

    npm install 过程中报错 解决方法 运行 npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/d ...

  8. Objective-C Properties 详解

    关于Objective-C 的property,很多iOS开发的新手都会很迷惑,也会包括有经验的iOS开发程序员, 因为Objective-C的property,说多不多,说少却也不少,从MRR(Ma ...

  9. QTP 保留对象

    1. 常用保留对象(Utility Objects) 保留对象:所谓QTP保留对象就是QTP本身预留的一些可用对象. 通俗些讲就是,当打开QTP时它就已经把这些对象给实例化了,直到关闭QTP后,这些保 ...

  10. maven(一),maven3.5.3的windows安装及Eclipse集成

    maven用了好长时间,需要系统的学习一下.maven ,是一个项目构建的工具,是一个项目管理和综合工具,具有项目生命周期管理功能. maven现在到了3.5.3,就以这个版本进行. 一.下载mave ...