Ejemplo sencillo:
#!/usr/bin/ruby =begin Abre y lee un fichero Se usa un bloque (entre do - end) El identado no es necesario El fichero se cierra automáticamente al acabar el bloque. =end File.open("/etc/passwd", "r") do |f1| while linea = f1.gets puts linea end end # Fin del bloque
frutas=[ "naranjas", "uvas", 123, "limones", "uvas" ] frutas<<"peras" # Añade un string frutas.delete(123) frutas.uniq! # Elimina elementos duplicados frutas.insert(2, %w{fresas pomelos}) # Inserta otro array # %w -> array de strings # sin usar comillas puts frutas # naranjas,uvas,fresas,pomelos,limones,peras puts frutas.length # 5 puts frutas[2][1] # pomelos frutas.delete_at(2) frutas.insert(3, "cerezas", "kiwis") # Inserta frutas.sort! # Ordena ``in-place'' puts frutas # cerezas, kiwis, limones, naranjas, peras, uvas
nums = -1..9 puts nums.include?(10) # false (10 no en el rango) puts nums === 0 # true (0 en el rango) puts nums.first # -1 puts nums.last # 9 puts nums.to_a # [-1,0,1,2,3,4,5,6,7,8,9] puts nums.to_s # "-1..9" array = nums.reject {|i| i < 7} puts array # [7, 8, 9]
edad_de = {'Eva'=>23, 'Ana'=>19, 'Oscar'=>41} puts edad_de['Ana'] # Imprime 19 edad_de['Eva'] = 18 # Cambia un valor edad_de['Juan'] = 26 # Añade un elemento edad_de.delete('Oscar') # Borra un elemento
frutas=["naranjas", "uvas"] # Bloque usando do-end frutas.each do |f| puts "#{f}:#{f.length}" # naranjas:8 end # uvas:4 print "Añade otra fruta: " nf = gets.chomp # Lee stdin y elimina el \n while nf != "" # Si la entrada no está vacía frutas<<nf.to_s # añádela a la lista print "Añade otra fruta: " nf = gets.chomp end # Bloque usando llaves 3.times { |i| puts i } # 0, 1, 2
print "Introduce un entero: " x = gets.chomp.to_i if x < 0 x = 0 puts "Negativo cambiado a 0" elsif x == 0 puts "Cero" else puts "Positivo" end
# Forma unless unless x == 0 puts x end # Case scale = 8 case scale when 0: puts "lowest" when 1..3: puts "medium-low" when 4..5: puts "medium" when 6..7: puts "medium-high" when 8..9: puts "high" when 10: puts "highest" else puts "off scale" end
# Argumento con valor por defecto def compra(fr, nf="manzanas") fr<<nf end # Número de argumentos variable def compram(fr, *nf) # Recorro todos los argumentos nf.each { |f| fr<<f } end frutas=[] # Los paréntesis no son obligatorios compra frutas, "peras" # Usa el valor por defecto compra(frutas) # Usa múltiples argumentos compram(frutas, "limones", "naranjas") puts frutas # peras, manzanas, limones, naranjas
# Comprueba direcciones de e-mail print "Introduce un e-mail: " s = gets.chomp if /\w+@\w+\.\w+((\.\w+)*)?/.match(s) puts "Dirección correcta" end # Busca URLs en un fichero de texto # Abre el fichero de solo lectura # comprobando excepciones begin f = File.open("fich.txt","r") rescue Exception => msg print "No puedo abrir --> ", msg, "\n" exit(1) end
# Expresión regular a buscar (\s == [:space:]) urlreg = /http:\/\/([^\s]+)/ nl=1 f.each do |l| # Busca todas las URLs en la línea actual # e imprimelas l.scan(urlreg) { |m| print "Línea #{nl}-><#{m}>\n" } nl+=1 end f.close
# Corrige un string s = "oCme más futra" s.gsub!("oCme", "Come") s.gsub!("futr", "frut") puts s # Imprime "Come más fruta" # Separa un string en una lista s = "Uno:Dos.Tres-Cuatro" l=s.split(/[:.-]/)
# Módulo con utilidades para ficheros require 'fileutils' # Comprueba argumentos if ARGV.length < 1 puts "Necesito un directorio como argumento" exit end dir=ARGV[0] # Chequea que sea un directorio unless File.directory?(dir) puts dir+" no es un directorio" exit end
# Recorre los ficheros .xml begin # Cambia al directorio FileUtils.cd(dir) Dir.glob("*.xml") do |f| # Construye el nuevo nombre new = File.basename(f, ".xml")+".html" # Renombra los ficheros File.rename(f, new) end rescue Exception => msg puts "Error: "+msg end
print "Proceso a chequear: " proc = gets.chomp begin # Ejecuta el comando ps y obten la salida output = `ps -edf|grep #{proc}` # Separa la salida en campos procinfo = output.split() # Muestra los resultados puts "Ejecutable : #{procinfo[7]}" puts "Propietario : #{procinfo[0]}" puts "PID : #{procinfo[1]}" puts "PPID : #{procinfo[2]}" puts "Hora inicio : #{procinfo[4]}" rescue Exception => msg puts "Error: "+msg end
# Módulo adicional require 'find' print "Directorio inicial: " searchpath = gets.chomp print "Patrón de búsqueda: " pattern = gets.chomp # Busca recursivamente Find.find(searchpath) do |path| # Comprueba si el patrón corresponde con el fichero if File.fnmatch(pattern, File.basename(path)) # Muestra el nombre del fichero puts "Fichero : " + File.basename(path) # Información sobre el fichero stat = File.stat(path) # Muestra los permisos en octal printf("Permisos : %o\n", stat.mode)
# Muestra el UID y el GID del propietario print "UID del propietario : " puts stat.uid print "GID del propietario : " puts stat.gid # Muestra el tamaño del fichero print "Tamaño (bytes) : " puts stat.size puts "----------------------------------------" end end
Administración de Sistemas e Redes <ASR.USC[at]gmail.com>
Tomás Fernández Pena <tf.pena[at]usc.es>
Última actualización: 30-09-15 17:44 por tomas
Curso de Administración de Sistemas y Redes por Tomás Fernández Pena se distribuye bajo la licencia Creative Commons Recoñecemento-Compartir baixo a mesma licenza. 3.0 España.
Trabajo original en persoal.citius.usc.es/tf.pena/ASR.