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.