View Weekly Course Schedule
View Course Resources.
Other interesting links: |
Visit linux.die.net/man/ for searchable Linux man pages in HTML format,
docs.sum.com for searchable Solaris man pages and other Solaris documentation,
Visit the Tampa-St. Pete Linux User's Group (SLUG). This group holds monthly meetings.
Most Unix and Linux software is actually GNU software (www.gnu.org), a project of the Free Software Foundation.
Download free Unix and Linux distributions from distrowatch.com.
Download The PuTTY suite of Internet tools: SSH, scp, sFTP, and others, from www.chiark.greenend.org.uk/~sgtatham/putty.
Download the WinSCP GUI wrapper for the PuTTY scp and sFTP tools from sourceforge.net/projects/winscp/.
Visit www.unix.org for the OpenGroup's Unix site, including the Single Unix Specification.
View Solaris certification FAQ and Oracle's Solaris Certification information, including Sun Certified System Administrator (SCSA) exam objectives part 1 and part2.
View Linux LPI certification and View LPI-1 exam objectives.
|Time & Place:||Ref No. 92787: Monday & Wednesday, 7:30–8:45 PM, Dale Mabry Room DTEC–461|
Name: Wayne Pollock
Office & Phone: DTEC–404, 253–7213
View my Office Hours.
Yahoo Instant Messenger ID: waynepollocklive
Skype ID: email@example.com Click for IM:Homepage URL: https://wpollock.com/
Stephen G. Kochan, Patrick Wood,
Shell Programming in Unix, Linux and OS X: The Fourth
Edition of Unix Shell Programming, (4th Ed.)
Optional: Hahn, Harley, Harley Hahn's Guide to Unix and Linux, ©2009 Harley Hahn, Pub. by McGraw-Hill. ISBN # 978-0-07-313361-4.
(This course is 3 credit hours long.)
This course is intended for students who have mastered the basic Linux/Unix
operating environment and who would like to read and understand the various
administrative scripts, and to write scripts to automate day-to-day
This course is designed to teach students the skills they need to
effectively read, write and debug shell scripts.
This course explores in detail the Bash shell scripting language.
Major topics covered include reading, writing, modifying, and debugging
shell scripts, the shell environment, regular expressions, text filtering
The basic Unix/Linux environment is taught in the course CTS 1106 (Introduction to Unix / Linux).
|Objectives:|| The student will demonstrate a knowledge of the following
topics through objective tests, hands-on activities, and/or projects:
|Prerequisites:||CTS 1106 (Introduction to Unix / Linux), or permission of the instructor. Students enrolled in a degree or college credit certificate program program must complete all prerequisites. Note! HCC registration computers may not check for prerequisites before allowing you to enroll. Be certain you have all required prerequisites or you won't have much of a chance of success. Also you may be dropped from the class.|
|Facilities:|| Assignments must be completed on
You will need your own flash disk (preferably USB-3 compliant), writing materials, and Scantron 882–E or 882–ES forms.
You can use HawkNet (WebAdvisor) to obtain your final grade for the course. You can use your assigned Hawkmail (Hawkmail365) email address if you wish to discuss your grades via email. (Note, it may be possible to setup your Hawkmail account to forward all received emails to some outside email account; but you still must send mail from Hawkmail to discuss grades.)
Most college systems use a single sign-on user ID, known as HCC “NetID”. Visit netid.hccfl.edu to register and to update your credentials. (Your initial password is your uppercase first name initial, lowercase last name initial, and your seven digit student ID number.) Note the quickest way to resolve login issues is the HCC Live Web Portal (hcclive.hccfl.edu).
The college provides wireless network connections for students and guests
on Dale Mabry campus.
For students, select the network
Hawk Alert text messaging service allows you to receive important information regarding campus closures or emergencies. You may also sign up for financial aid notifications and registration and payment deadlines. This is a free service, although some fees may be applied by your cellular service provider or plan for text messages. To sign up, or for more information, visit www.hccfl.edu/hawkalert/.
HCC's Student Assistance Program (SAP) offers resources tailored to student life, providing you with the right tools to help you through some of life's toughest challenges. The college has contracted Baycare Health Management to provide free, professional, confidential counseling by telephone and in person. A wide range of topics may be addressed through this program, including mental health counseling, budgeting, and financial concerns. Please call 800-878-5470 or send email to firstname.lastname@example.org for further information.
A=90-100, B=80-89, C=70-79, D=65-69,
Projects will be assigned from the class web page at various times.
You will have sufficient time to complete the projects,
at least a week but usually two weeks.
Although there may be in-class group exercises, you must work
individually on projects, typically outside of regular class hours,
except when a project is designated as a group project.
(Currently, all projects are designated group projects.)
You may work together in small (two to four people) groups on group projects,
provided the names of all who worked together are listed.
Each student must still submit their own copy of the assignment.
Projects are graded on the following scale:
A = 95% (Excellent: Good design with good comments, style, and extras)
Minor extras worth +5 points, minor omissions or poor design worth -5.
Projects are not graded when turned in. They are graded all at once, sometime after the project deadline has passed (usually the following weekend). Every effort will be make to grade projects within a week of the due date, or as soon thereafter as possible. (See also submitting assignments below.)
Projects should be submitted by email to
Please use a subject such as “Shell Scripting Project #1
Submission” so I can tell which emails are submitted work.
Send only one assignment per email message.
Email your projects by copy-and-paste into your mail program.
Please do not use email attachments, except
when noted in the assignment directions.
If possible, use the “text” and not the
“HTML” mode of your email program.
Do not send any email to
In the event a student submits more than once for the same assignment, I will ignore all but the last one received up to the deadline. Assignments submitted after the deadline will not count toward your grade except as allowed by the course late policy. Also, you cannot resubmit an assignment once it has been graded.
The HCC email server automatically accepts and
silently discards email with certain types of attachments.
If you must send email to my Internet (non-YborStudent) email
account please avoid using any attachments, but especially
To send email with a “
To avoid having your submitted work rejected as “spam”, you can use Hawkmail365 to send email to professors. This doesn't always work either! If you are having difficulties with this email address, use MyHCC email.)
If you have an email problem you may turn in a printout instead. Be sure your name is clearly written on the top of any pages turned in. Please staple multiple pages together (at the upper left).
Always keep a backup copy of your submitted projects, until you are certain they have been received and graded correctly.
|HCC Academic Calendar:|
Tuesday 1/10/2017 (First class meeting: Wednesday 1/11/2017)
(Dale Mabry campus only! Rest of HCC begins on Monday 1/9/2017)
|Add-Drop Ends:||Friday 1/13/2017|
|Last Day to Withdraw:||Friday 3/24/2017|
|Classes End:||Monday 5/8/2017 (Last regularly scheduled day of class: Monday 5/8/2017|
|Grades Available:||Thursday 5/11/2017 (from Florida Virtual Campus or from HawkNet)|
|HCC is closed on:||
Monday 1/9/2017 Dale Mabry campus only |
Monday 1/16/2017 (Martin Luther King Jr. Day),
Monday 2/20/2016 (Presidents' Day) (all campuses closed except for Dale Mabry),
Monday–Sunday 3/13/2017–3/19/2017 (Mid-Term Break),
Thursday 4/13/2017 (Faculty In-Service Day)
Friday–Sunday 4/14/2017–4/16/2017 (Spring Day),
Dropping or withdrawing may have an impact on financial aid, veteran’s benefits, or international student visa status. Students are encouraged to consult with a financial aid, the VA certifying official, or the international student advisor, as appropriate, prior to dropping or withdrawing from class.
If, to participate in this course, you require an accommodation due to a physical disability or learning impairment, you must contact the Office of Services to Students with Disabilities, Dale Mabry campus: Student Services Building (DSTU) Room 102, voice phone: (813) 259–6035, FAX: (813) 253–7336.
HCC has a religious observance policy that accommodates the religious observance, practices, and beliefs of students. Should students need to miss class or postpone examinations and assignments due to religious observances, they must notify their instructor at least one week prior to a religious observance.
|Quotes:||“Tell me and I'll listen.|
Show me and I'll understand.
Involve me and I'll learn.”
|— Lakota Indian saying|
|“Learning is not a spectator sport!”||— Chickering & Gamson|
|Dates Mon Wed||Topics and Assigned Readings|
assign User ID, discuss passwords.
What is shell scripting?
Why is it important to know?
POSIX and portability.
File, directory, and pathname concept review. Review basic commands:
Readings: Chapter 1, man pages for listed commands
|1/16||Martin Luther King Jr. Day — HCC Closed|
Project 1 due: 1/23
Readings: online vi/vim resources, (Chapter 22 in Hahn)
Shell scripting basic concepts (mostly review): she-bang, permissions.
Shell features: globbing (wildcards),
I/O redirection, pipelines.
Readings: Chapter 2; pages 93-97, 289, 262-264, 315-320, on-line locale resources, (465-471 in Hahn book)
Readings: Chapter 3 (pages 51-64), on-line regular expression resources
Project 2 due: 2/8
Some common filter commands:
Readings: Chapter 3 (pages 64-91), pages 202-207, the man pages for the listed commands
|2/15||Presidents' Day — HCC Closed|
Python basics: variables, statements, if-statements, loops, ...
Comparison with Perl.
Project 3 (filters) due: 2/27
Readings: on-line Python resources and Perl resources
Readings: on-line awk resources, find command resources
Additional utilities useful in scripts:
Project 4 (Perl or Python) due: 3/8
Readings: The man pages for the commands listed, find command resources, xargs, expect (and Tcl/Tk) command resources
|3/13 – 3/29||Mid-Term Break — HCC Closed|
Command line processing steps (input, tokenizing, parsing,
various expansions, command substitution, arithmetic expansion,
field splitting (and |
Project 5 (awk) due: 3/22
Readings: Chapters 5, 10, pages 251-254, 255-257, 317-319, on-line command line processing resources
Positional and other special parameters, parameter substitution.
Readings: Chapters 6, 11, pages 131-135, 246-251
Readings: Chapter 7
Using shell loops: |
Project 6 (parse access log) due: 4/5
Readings: Chapter 8, pages 268-271, 332-333, 180-184, 303
Interactive (login) shell use: aliases, login scripts, the environment,
history, auto-completion, job control, using |
Readings: Chapters 11, pages 103-110, 284, 326-328, 330-339, 340-346, 352-359
|Thu 4/13||(Thursday) In-Service Day — HCC Closed|
|(Friday–Sunday) Spring Day — HCC Closed|
Review: Environment variables, permissions, |
Readings: Chapter 4; pages 303-306, on-line permissions and octal number reference, on-line command line processing resources
Project 7 (find) due: 4/24
Readings: Chapter 9, on-line resources for temporary files, on-line resources for named pipes
Using signals: |
Readings: Pages 257-261
Optional (time and interest permitting):
menu-driven scripts (mention |
Readings: On-line resources TBD
Project 8 (getopts) due: 5/8
|PuTTY home||Recommended Windows SSH client||Copy and Paste Help||How to use PuTTY's copy and Paste|
|Csh Programming Considered Harmful||A famous article from Tom Christiansen posted in 1996||Soft Skills||Information about Soft Skills, Professional affiliations and certifications, and job hunting and interviewing tips.|
|www.unix.org||The OpenGroup's Unix site, include the Single Unix Specification||comp.unix.shell newsgroup||An active discussion netnews group; you can post questions here and get anwsers|
|Linux Standard Base (LSB)||Standard tools, DLLs, etc., common to all Linux distros; Current spec maintained by The Linux Foundation||Single Unix Specification||The current Unix reference, including for the shell and utilities|
|The UNIX System: Making Computers More Productive||An AT&T historical video introduction to UNIX||Unix Standard search plugin|| Download this XML file; put it in
|docs.sun.com||Solaris man pages, administrator guides, and more||linux.die.net||Searchable Linux man pages in HTML format|
|Various system shells||Sven Mascheck's page describing the standard shells found on many systems||The Unix Heritage Society||Preserves historical versions of Unix (including source code) and Unix history|
|LinuxCommand.org||Excellent site for shell and related resources, including a PDF book you can use for review or as a reference||CommandLineFu.com||A large collection of “one-line” shell scripts|
|PurpleMath.com||Basic and college math tutorials; highly recommended if you need a refresher||Locales||Brief overview of locales and text encoding|
|Vi lovers home||Tutorials, FAQs, and references for vi||vim home||Home page for VIM (Vi, IMproved)|
|Vim documentation project||Tutorials, FAQs, and references for vim||vim quick reference (PDF)||A two-page reference to vim|
|Vim Graphical Cheat-sheet (PDF)||A nice quick reference graphic (Preview), from www.viemu.com||Why use vi||An article explaining why vi/vim is a great editor|
|Vim Tips||Nice collection of productivity tricks for Vim||Play Vim Adventures||An adventure-like game designed to teach you Vim|
|Regular Expressions||Shows Regular Expression (“regex”) syntax||RegExLab.jar||Download Regular Expression Lab (a Java program); (See also Java Regular Expression syntax summary)|
|www.regular-expressions.info||On-line tutorial and reference for regular expressions||regexlib.com||On-line cookbook (library) of standard regular expressions|
|regular expression cartoon||The importance of learning regular expressions (Source: xkcd.com)||Learning to Use Regular Expressions||Another regular expression tutorial|
|sed one-liners explained||A pretty good sed "cookbook"|
|Python.org||Python language home||Python PEP #1||Python Enhancement Proposals|
|Python lecture notes||Some brief lecture notes about the Python language||ACMPython Learning Path||Python tutorial (assumes you know basic concepts)|
|Python 2 & 3 documentation||Python documentation, including library and language references, tutorials, and HOWTOs||Python community forums||Python's help forums|
|Python 3 official tutorial||See also the Python 2 tutorial||LearnPython.org||Interactive Python tutorial|
|TutorialsPoint.com Python tutorial||Another pretty good Python tutorial||Think Python: How to Think Like a Computer Scientist||The Python textbook (free online) used for the Python Tutorial for MIT's Open Courseware Intro to Electrical Engineering and Computer Science I|
|Python Qt||PyQt tutorial|
||A short tutorial, with examples (work in progress)||CPAN||Comprehensive Perl Archive Network|
|learn.perl.org||Perl tutorials from Perl.org||Beginning Perl||An on-line book for learning Perl|
|PerlMonks.org tutorials||Another site with Perl resources||Perl.com||A portal for all things Perl|
|PerlMeme.org tutorials||Good site with Perl resources||Perl's here documents||A description of Perl here documents|
|Scripting language comparison chart||A “cheat-sheet” comparing Perl, PHP, Python, and Ruby||RosettaCode.org||A wonderful learning site, RosettaCode solves hundreds of scripting tasks the same way, but using different languages.|
|Gnu AWK User Guide||A tutorial and reference manual for Gnu AWK||AWK FAQ||AWK Frequently Asked Questions|
|AWK Overview||A copy of my lecture notes for AWK||POSIX AWK Reference and description||The AWK man page from The Open Group POSIX document SUSv4|
||A short tutorial, with examples||find command tip|| Shows how to use
||From www.unixreview.com||Shell Scripting Introduction||Shows the basics of shell scripting|
||From the O'Reilly book Exploring Expect||Tcl tutorial||Shows the basics of Tcl scripting (See also Tk tutorial)|
|Command Line Processing||The steps the shell performs when parsing input||Variables, Control Structures, and Funtions||A mini-tutorial for non-programmers|
|POSIX (and SUS) Utility Guidelines||Standard utility conventions (such as starting options with a dash)||Using getopts and getopt||A brief tutorial|
|Octal Number Chart|| Shows how to use octal numbers with
||Filesystem Hierarchy Standard (FHS)|| A description of the standard directories on Linux
(for Unix systems, see also
Using temporary files,
|| How to create, use, and clean up temporary files
||Using named pipes||How to use named pipes (a.k.a. FIFOs)|
|flock-demo|| A script showing advisory file locking with
||timestamp.sh||A POSIX script to display Unix Time (See also timestamp.c)|
|crontab reference||Shows crontab file syntax||at command syntax|| Some
|StartupScript.txt||Sample startup shell scripts (/etc/init.d/foo) for a foo server||System V init files||From /usr/share/doc/initscripts-7.42.2 on Fedora|
|RCS Demo||A sample session using RCS with a shell script||Here documents||An overview of the Unix/Linux shell's here document|
|Shell Scripts (and Other Demos)|
|LDP: Bash scripting guide and reference)||Shows how to write Bash shell scripts (See also this good Bash guide and reference from mywiki.wooledge.org)||SSC's Bash reference card (PDF)||See also the complete Bash man page|
|fancyio||Shows how to write interactive shell scripts||fortune||A fortune cookie script (plus some sample fortunes)|
|nusers||Shows a simple shell script||nusers.1||Sample man page for nusers, using troff/man macros|
|getopts Demo|| A demo of the POSIX
||getopt Demo|| A demo of the Gnu
|backup-etc.sh||A simple shell script to backup /etc directory||httpd.sh|| Apache script for use in
|.bashrc||Some useful bash shell aliases and functions||.bash_profile||A simple Bash login script|
|.procmailrc||A sample .procmailrc that auto-replies and filters spam||add-users||A complex script used to add users in batches|
|todo||A simple “todo list” shell script||didit||Simple shell script, used with “todo” script|
|didit2||Shell script, used with “todo” script||didit3||Fancy shell script, used with “todo” script|
|pick||interactive selection script||watch||Shows how to write shell and awk scripts|
|suidDemo.tgz||Shows how suid can be used to control access to files||Sample .vimrc||A basic ~/.vimrc file|
|exec Demo|| A demo using
||find-IP||A script to locate files in /etc containing the host's IP address|
|sttydemo.sh||A script using stty for fancy I/O||find-dups.sh||A highly portable script that shows many advanced techniques, that finds duplicate files by comparing MD5 checksums|
|filter.py||Model Python script to act as a standard *nix filter||hellotk.pl||A Perl/Tk GUI script (Hello, World)|
|Perl CGI (Database) Scripts|
|filter.pl||Model Perl script to act as a standard *nix filter||hellotk.pl||A Perl/Tk GUI script (Hello, World)|
|HccDump||The SQL statements needed to create the HCC MySQL database||graphics.tgz||The gzipped tar file containing the sample gif files for the hcc.com postcard system; (Unpack in the directory: DocumentRoot/graphics)|
|send-postcard.pl||Perl script to send an e-card; uses CGI and DBI (DB access)||show-postcard.pl||Perl script to retrieve an e-card; uses CGI and DBI|