Next Previous Contents

7. Eksempel

7.1 Administrasjon

Et lite skript som lager brukere og hjemmekataloger på en UNIX-maskin.

  1| #!/usr/bin/ruby
  2| require 'getoptlong'
  3| require 'fileutils'
  4| 
  5| class User
  6|   include FileUtils    # henter inn metodene cd, mkdir, chmod m.m i klassen vår.
  7| 
  8|   GROUP = "deltaker"               # Vi definerer konstanter for gruppe,
  9|   HOME_BASE = "/home/deltaker"     # katalogplassering og
 10|   MODE = 0755                      # filrettigheter.
 11| 
 12|   def initialize( username )
 13|     @name = username
 14|     raise ArgumentError, "Need username." unless @name   # Må ha et brukernavn.
 15|     @homedir =    HOME_BASE + File::SEPARATOR + @name    # Subkataloger...
 16|     @public_html = @homedir + File::SEPARATOR + "public_html"
 17|     @cgi_bin = @public_html + File::SEPARATOR + "cgi-bin"
 18|   end
 19| 
 20|   def make( adduser = false )
 21|     make_user if adduser
 22|     make_dir( @homedir,     MODE )    # Lager de forskjellige katalogene.
 23|     make_dir( @public_html, MODE )
 24|     make_dir( @cgi_bin,     MODE )
 25|   end 
 26| 
 27|   def make_dir( dir, mode = 0755 )
 28|     mkdir( dir, :mode => mode ) rescue Errno::EEXIST   # Forsøk å lage katalog.
 29|     chmod( mode, dir )             # Sett rettighetene i tilfelle mkdir feilet.
 30|     cd( dir )                      # Forflytter oss til katalogen og ...
 31|     system("chown #{@name} . * -Rf")         # kjører eksterne kommandoer
 32|     system("chgrp #{GROUP} . * -Rf")         # for å endre fileierskap.
 33|   end
 34| 
 35|   def make_user                # Kjører eksternt program 'useradd'.
 36|     `useradd -g #{GROUP} -d #{@homedir} #{@name} `  
 37|   end
 38|   private :make_user, :make_dir
 39| 
 40| end
 41| 
 42| if __FILE__ == $0 then
 43|   opsjoner = GetoptLong.new(      # Henter kommandolinjeopsjonene.
 44|                        ["--username", "-u", GetoptLong::REQUIRED_ARGUMENT],
 45|                        ["--adduser",  "-a", GetoptLong::NO_ARGUMENT]
 46|                        )
 47|   username = nil
 48|   adduser = false
 49|   opsjoner.each do |opsjon, argument|
 50|     case opsjon
 51|     when "--username"
 52|       username = argument
 53|     when "--adduser"
 54|       adduser = true
 55|     end
 56|   end
 57|   user = User.new( username )
 58|   user.make( adduser )
 59| end

Merk at vi bruker både system og ´ (backtick) for å kjøre eksterne kommandoer og programmer.

Et annet alternativ er IO.popen som gir deg mer kontroll over innput til og utput fra det eksterne programmet.


Next Previous Contents