<?xml version="1.0"?>
<!-- ?xml-stylesheet type="text/xsl" href="TrainingCatalog.xsl"? -->
<!DOCTYPE course SYSTEM "TrainingCatalog.dtd">
<course title="Problem-Solving with Shell Scripts">
  <keywords>
    <keyword>shell programming</keyword>
    <keyword>training</keyword>
    <keyword>shell</keyword>
    <keyword>Unix</keyword>
    <keyword>programming</keyword>
    <keyword>programmer</keyword>
    <keyword>shell script</keyword>
    <keyword>script</keyword>
	<keyword>scripting</keyword>
  </keywords>
  <format>
    <description>One full day</description>
    <description>Emphasis on practical skills</description>
    <description>Hands-on</description>
  </format>
  <audience>
    <description>Programmers</description>
    <description>Software applications developers</description>
    <description>System administrators</description>
    <description>Webmasters</description>
    <description>Power users</description>
    <description>Tool builders</description>
  </audience>
  <overview>
    <p>
    This course is for Unix users (and users of Unix-like shells on other
    systems) who want to increase their mastery of this powerful repertory of
    problem-solving tools and techniques.
    Shell programming skills enable extraordinary productivity gains.
    </p>
    <p>
    Its primary goal is to impart the skills needed to use advanced
    features of the Bourne and Korn shells, in particular their use as a
    programming language and environment. A C-Shell-oriented version of this
    course is also available.
    </p>
    <p>
    Familiarity with the basic concepts of programming is helpful but not
    required.
    </p>
    <p>
    In its method, the course's emphasis is on the practical, with the
    majority of the classroom time devoted to hands-on activity. Attendees
    largely set their own paces, with the instructor acting mainly as a
    facilitator.
    </p>
    <p>
    Historical and theoretical material is kept to a minimum.
    </p>
  </overview>
  <prerequisites minimum="2">
    <prerequisite>
        Using a computer, including its window system and file system
    </prerequisite>
    <prerequisite>
        Using a text editor -- it doesn't have to be vi
    </prerequisite>
  </prerequisites>
  <objectives>
    <objective>Use grep to search text</objective>
    <objective>Use pr to format text</objective>
    <objective>Use expr for calculations</objective>
    <objective>Use sed to edit text streams</objective>
    <objective>Use wc to count and measure</objective>
    <objective>Use awk to process records</objective>
    <objective>Use various other commands including date,
      echo, lp, ls, man, more, sort, and wc</objective>
    <objective>Exploit powerful shell features:
      i/o redirection, command substitution,
      inter-process communication (pipes),
      file name generation, variable substitution,
      loops, tests, and branches</objective>
    <objective>Create and execute shell scripts</objective>
    <objective>Construct complex commands
      (options, arguments, metacharacters)</objective>
    <objective>Match patterns with regular expressions</objective>
    <objective>Perform arithmetic operations</objective>
    <objective>Use Unix's "man page" documentation</objective>
    <objective>Add shell programming to your repertory of problem-solving
      techniques</objective>
  </objectives>
  <method>
    The course consists of a sequence of examples and hands-on exercises.
    Each builds on the ones before it. By the end of the course, you have
    built solutions to significant problems.
  </method>
  <contents>
    <chapter title="Why Shell Scripts?">
      <topic>This is why programmers fall in love with Unix</topic>
      <topic>Similar concepts from other environments</topic>
    </chapter>
    <chapter title="Productivity Skills">
      <topic>Command-line editing</topic>
      <topic>Text editing</topic>
    </chapter>
    <chapter title="Philosophy">
      <topic>Unix's "building blocks" approach</topic>
      <topic>Silence is golden</topic>
    </chapter>
    <chapter title="Documentation">
      <topic>What's in a man page</topic>
      <topic>How they're organized</topic>
      <topic>Why they're effective</topic>
      <topic>How to use them</topic>
      <topic>Special case: shell built-in commands</topic>
    </chapter>
    <chapter title="File Names and I/O">
      <topic>The ls command and its options</topic>
      <topic>File name wildcards: * and ?</topic>
      <topic>The cat command</topic>
      <topic>Notions of stdin, stdout, stderr</topic>
      <topic>The more command</topic>
      <topic>The date command</topic>
    </chapter>
    <chapter title="Redirection">
      <topic>Output Redirection</topic>
      <topic>Output Redirection with Append</topic>
      <topic>The echo command</topic>
    </chapter>
    <chapter title="Shell Variables">
    </chapter>
    <chapter title="Command Substitution">
      <topic>The wc command</topic>
      <topic>Command Options</topic>
    </chapter>
    <chapter title="Unix Plumbing">
      <topic>Pipes</topic>
      <topic>The pr command</topic>
      <topic>The lp command</topic>
      <topic>The sort command</topic>
      <topic>Moving data between files, streams, variables, devices</topic>
    </chapter>
    <chapter title="Creating and Running a Shell Script">
      <topic>The chmod command</topic>
      <topic>The $PATH variable</topic>
    </chapter>
    <chapter title="Processing Text">
      <topic>Building a simple bookkeeping system</topic>
      <topic>The grep command</topic>
      <topic>Extracting text patterns</topic>
      <topic>The sed command</topic>
      <topic>Stream editing</topic>
    </chapter>
    <chapter title="Regular Expressions">
    </chapter>
    <chapter title="Shell Programming Control Structures">
      <topic>Loops</topic>
      <topic>Arithmetic</topic>
      <topic>The expr command</topic>
      <topic>The awk command</topic>
      <topic>Processing fields and records</topic>
    </chapter>
    <chapter title="Summary">
    </chapter>
  </contents>
  <setup>
    <requirement>Classroom</requirement>
    <requirement>Overhead projector</requirement>
    <requirement>A PC or workstation for each student</requirement>
    <requirement>Connection to the internet</requirement>
    <requirement>A workbook for each student</requirement>
  </setup>
  <travel>
    Travel outside the San Francisco
    Bay Area requires reimbursement of the instructor's travel expense.
  </travel>
  <updated>01-Jan-1999</updated>
</course>

