首先進入到當前文件所在的,而後在命令行運行ruby 文件名java
$ cd tmp/ruby $ruby demo01.rb
$ irb irb(main):001:0> print("hello")
exit能夠退出當前的命令行正則表達式
使用雙引號中包含的轉義字符會發生轉義,使用單引號包含的字符一般不會發生轉義,
可是\和單引號時,須要使用\去轉義。shell
雙引號數組
print("hello \n world! \n") #hello 和world會換行
單引號ruby
print('hello \n world \n') #hello \n world \n
單引號發生轉義數據結構
print('hello \\ \'world\' ') #hello \ 'world'
ruby在調用方法時能夠省略(),print("hello「),其中print 是方法
「hello」爲參數ui
print("hello") #等價 print "hello"
print 能夠接受多個參數,參數間用逗號隔開編碼
print "hello ","world ","aaa" #hello world aaa
print和puts
puts會每次打印的結果後面加換行符命令行
puts "hello","world" #hello #world
p方法和print、 puts
p方法中數值和字符串會輸出不一樣的結果,且轉義字符不會發生轉義code
puts('20') #20 puts(20) #20 p('20') #'20' p(20) #20 p("hello \n world") #"hello \n world"
Ruby的某些環境下,執行中文腳本會發生錯誤(invalid multibyte
char(utf-8)),這個是沒有指定程序的編碼形成的.
解決的方法:在程序的首行代碼添加註釋「# encoding:編碼方式」,
若是沒有魔法註釋,默認使用utf-8
但願以UTF-8編碼在控制檯輸出結果,可使用-E 編碼方式
$ruby -E UTF-8 腳本名稱 $irb -E UTF-8
area=300 print "面積爲:#{area}mm" #面積爲:300mm
單行註釋使用#表示,從#到該行的結尾的內容都是註釋的內容
#這是一行註釋
多行註釋 =begin和=end之間的內容
=begin 做者:adsad 年齡:阿斯大賽的 =end
語法:if 條件 then 條件成立時執行 end
if 1==1 then print "1等於1" # 1等於1 end
其中then能夠省略
語法:if 條件 then 條件成立時執行 else 條件不成立時執行 end
if 1==2 then print "1等於2" else print "1不等於2" #1不等於2 end
while語句
語法:while 循環條件 do 循環處理 end
其中do能夠省略
eg: 打印1~10的數字
i=1 while i<=10 do puts(i) i=i+1 end
times方法
times用來處理一直循環次數的狀況
語法:循環次數.times do 循環處理 end
eg:輸出10次hello world
10.times do puts "hello world" end
建立數組
arr=[] #建立空數組 arr1=["hello",10] # 數組元素能夠是不一樣類型的對象 puts arr1[1] #10
經過索引訪問和修改數組的值
arr=["hello",12] puts arr[0] #hello arr[0]=12; puts arr[0] #12
給數組中不存在的索引賦值能夠改變數組的長度
arr=["hello",12] arr[4]=10 p arr[3] # nil puts arr[4] #10
獲取數組的長度
arr=["hello",12] puts(arr.size) #2
遍歷數組,對數組中的值執行某個方法
語法:數組.each do |n| 處理循環代碼 end
eg:遍歷數組,打印出數組中的每個值
arr=["hello",12] arr.each do |n| puts n end
散列是程序中經常使用到的數據結構,散列通常使用字符串或者符號、數值做爲健,來保存對應的對象
通常做爲名稱標籤使用,建立符號,只須要在表示符或者字符串前加上:
sym=:foo #表示符號":foo" sym2=:"foo" #同上
符號和字符串轉換
sym=:foo p(sym.to_s) #「foo」 str="foo" p str.to_sym #:foo
建立散列
song={ :title=>"love", :artist=>"xiaohudui" } #簡潔寫法 song1={ title:"love", artist:"xiaohudui" }
散列的使用
獲取散列中的對象
song1={ title:"love", artist:"xiaohudui" } puts song1[:title] #love
給散列中添加對象
song={ title:"love", artist:"xiaohudui" } song[:tel]="121323213" p song #{:title=>"love", :artist=>"xiaohudui", :tel=>"121323213"}
遍歷散列
語法:散列.each do |key,value| 循環處理代碼 end
eg:遍歷散列,打印出散列中全部的健和值
song={ title:"love", artist:"xiaohudui" } song.each do |key,value| print key,"=>",value,"\n" # title=>love # artist=>xiaohudui end
建立正則表達式
regexp=/aaa/
用正則表達式匹配字符串
語法:/模式/ =~"字符串「
regexp=/aaa/ reg=/java/ puts regexp=~"lisadasaaadd" #7 p reg=~"lisadasaaadd" #nil
匹配成功返回模式開始的位置,失敗返回nil(表示對象不存在)
經過ARGV數組獲取命令行中輸入的參數
num1=ARGV[0] num2=ARGV[1] #使用to_i方法把字符串轉化成整數 puts "num1+num2=#{num1.to_i+num2.to_i}" #num1+num2=3
運行ruby命令執行腳本
$ ruby 腳本名稱 1 2
文件的讀取
讀取文件內容的流程:
filename=ARGV[0] file=File.open(filename) text=file.read print text file.close
執行ruby命令
$ruby 上面的腳本名 讀取文件的文件名
逐行讀取文件的內容,上面的程序的問題
一種更好的辦法是逐行文件的內容
filename=ARGV[0] file=File.open(filename) file.each_line do |line| print line end file.close
each_line方法會對文件逐行讀取,每次只讀取一行的內容輸出,知道文件的內容
輸出完爲之.
方法的定義和調用
#定義方法 def hello puts "hello" end #調用方法 hello #等價hello()
ruby中把能被其餘程序引用的程序稱爲庫,使用require或require_relative
方法來引用庫,庫名能夠省略後綴名rb
調用require方法後,Ruby搜索指定庫並讀取指定庫的內容,讀取完畢後纔會執行
require後面的內容。
require在預先定義好的路徑下引用與ruby一塊兒安裝的庫
require_relative是根據當前的腳本的執行目錄來進行的
eg:模範grep命令的例子
grep.rb定義一個方法
def grep(pattern,filename) file=File.open(filename) file.each_line do |line| if pattern=~line then print line end end end
Uagegrep.rb中引用grep.rb
require_relative "grep" pattern=Regexp.new(ARGV[0]) filename=ARGV[1] grep(pattern,filename)
hello.txt
文件的讀取 讀取文件內容的流程: 1. 打開文件 2. 讀取文件的內容 3. 輸出文件的文本數據 4. 關閉文件 mzt
shell中輸入
$ruby Uagegrep.rb mzt hello.txt #mzt(執行的結果)