1 / 25

CIT 383: Administrative Scripting

Commands. CIT 383: Administrative Scripting. Topics. Commands System Exec Command Quotes Popen Expect Time UNIX Time Time Zones Calendars Ruby DateTime classes. System. Executes command string in a subshell system(“tar cjf ruby.tar.bz2 *.rb”)

merry
Download Presentation

CIT 383: Administrative Scripting

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CIT 383: Administrative Scripting Commands CIT 383: Administrative Scripting

  2. Topics Commands • System • Exec • Command Quotes • Popen • Expect Time • UNIX Time • Time Zones • Calendars • Ruby DateTime classes

  3. CIT 383: Administrative Scripting System Executes command string in a subshell system(“tar cjf ruby.tar.bz2 *.rb”) system(“cut –d: -f1 /etc/passwd | sort”) All shell features are available Globbing (*/*.c) Tilde expansion (~jsmith) I/O redirection Pipes

  4. CIT 383: Administrative Scripting System with Multiple Arguments Multiple arguments have different behavior First argument is name of command. Later arguments are command line arguments. None are interpreted by shell. Examples system(“echo *”) prints all files in directory system(“echo”, “*”) prints a * system(“tar”, “c”, “f”, “ruby.tar”, “rubyfiles/”)

  5. CIT 383: Administrative Scripting System Security Archiving user specified files files = gets system(“tar cf ruby.tar #{files}”) What if the user enters “*; rm –rf/”? tar cjf ruby.tar.bz2 * rm –rf / Use multiple argument form to avoid this bug. files = gets system(“tar”, “c”, “f”, “ruby.tar”, files)

  6. CIT 383: Administrative Scripting Exec Replaces current process by running command. exec(“ls –l”) # program never reaches this point Single argument form invokes shell exec(“echo *”) Multiple argument form does not exec(“echo”, “*”)

  7. CIT 383: Administrative Scripting Command Quotes Ruby will run commands in backquotes os = `uname` os = %x|uname| Return value is output of command as String. Command quotes invoke a subshell: files = `echo *` sortedfiles = `echo * | sort`

  8. CIT 383: Administrative Scripting Popen Pipe Open IO.popen(command_string, mode) Opens command like a file r: read from command’s STDOUT. w: write to command’s STDIN. Similar to command quotes in read mode: uname_fh = IO.popen(‘uname –a’, ‘r’) unixname = uname_fh.readlines

  9. CIT 383: Administrative Scripting Popen Popen offers more control than command quotes. Use less memory (read a line at a time.) Obtain partial output immediately. Examples vmfh = popen(“vmstat 5 5”) # Throw away header lines then print vmfh.gets vmfh.gets vmfh.each do |vmline| puts vmline end

  10. CIT 383: Administrative Scripting Expect Automation tool for interactive processes. fsck ftp minicom passwd telnet Methods spawn: start an external command expect: wait for command to output pattern send: send string to command as input

  11. CIT 383: Administrative Scripting Expect PTY.spawn(‘telnet zork.nku.edu’) do |r_f,w_f,pid| r_f.expect(/^Username.*: /) do w_f.print ‘jsmith’ end r_f.expect('Password:') do w_f.print password end r_f.expect(‘$ ‘) do w_f.print “passwd #{password} spameggs“ end end

  12. CIT 383: Administrative Scripting UNIX Time UNIX time is seconds since the midnight, Jan 1, 1970. Most OS represent time as 32-bit signed int. Lowest time: 1901-12-13 Highest time: 2038-01-18 OS need to upgrade to 64 bits to avoid Y2038 problem.

  13. CIT 383: Administrative Scripting Time Zones

  14. CIT 383: Administrative Scripting UTC: Coordinated Universal Time Local time at royal observatory at Greenwich • GMT established at 1884 conference. • Prime meridian (0 degrees longitude.) International Atomic Time (TAI) • Based on atomic clock, established in 1958. • Includes leap seconds to account for lengthening of day as the Earth’s rotation slows. Time zones defined by offset from UTC.

  15. CIT 383: Administrative Scripting Calendars Julian Calendar • Introduced by Julius Caesar in 46BC. • Reform of older Roman calendar system, which had leap months. • 365 days, 12 months, leap day every 4 years. • Month Quintilius became July. Gregorian Calendar • Proposed by Aloysius Lilius. • Decreed by Pope Gregory XIII in 1582 (adopted by English 1752) • Dropped 10 days from Julian calendar. • Changed leap day rules • Leap day every 4 years except • if year is divisible by 100 except • years divisible by 400 are still leap years.

  16. CIT 383: Administrative Scripting Ruby DateTime classes Date Mutable date objects. Time Mutable time objects that also include date. DateTime Immutable objects with date and time.

  17. CIT 383: Administrative Scripting Creating a Date object Date.today • Create Date object for current day. Date.new(year, month, day) • Create Date object based on year, month, and day. Date.parse(string) • Create Date object from date stored in string.

  18. CIT 383: Administrative Scripting Creating a Time object Time.gm(year <,month,day,hour,min,sec>) • Create time based on specified values. • Interpreted as GMT (UTC). Time.local(year <,month,day,hour,min,sec>) • Create time based on specified values. • Interpreted as local set time zone. Time.new • Create Time object initialized to current time. Time.now • Same as Time.new.

  19. CIT 383: Administrative Scripting Creating a DateTime object DateTime.new • Create Time object initialized to current time. DateTime.now • Same as Time.new. DateTime.parse(string) • Create DateTime from date stored in string

  20. CIT 383: Administrative Scripting Date and Time Arithmetic Addition and substraction of constants • Increment by day (Date) or second (Time) • Decrement by day (Date) or second (Time) Subtraction of dates • Determine days between two Dates. • Determine seconds between two Times.

  21. CIT 383: Administrative Scripting Ranges Sequence of values 1..10 ?a..?z Methods min max include?(num) Ranges as Intervals (1..10) === 4 # true (1..10) === 99 # false (1..10) === 2.718 # true

  22. CIT 383: Administrative Scripting Ranges and Arrays Ranges provide iterator methods • Including the each method. Ranges can be converted to Arrays • Use the to_a method. Ranges are stored efficiently • Only initial and final values are stored. • Do not convert 1..2**32 to an Array.

  23. CIT 383: Administrative Scripting Date Ranges today = Date.today nextweek = today + 7 weekdates = today..nextweek weekdates.each do |date| puts date end

  24. CIT 383: Administrative Scripting Waiting sleep(num) • Waits for num seconds. • Does not use any CPU during sleep. Applications • Wait before retrying an action that failed. • Periodic processes (check file every minute.)

  25. CIT 383: Administrative Scripting References • Michael Fitzgerald, Learning Ruby, O’Reilly, 2008. • David Flanagan and Yukihiro Matsumoto, The Ruby Programming Language, O’Reilly, 2008. • Hal Fulton, The Ruby Way, 2nd edition, Addison-Wesley, 2007. • Dave Thomas with Chad Fowler and Andy Hunt, Programming Ruby, 2nd edition, Pragmatic Programmers, 2005.

More Related