Home > Store

Hands-On KornShell93 Programming

Register your product to gain access to bonus material or receive a coupon.

Hands-On KornShell93 Programming

Book

  • Sorry, this book is no longer in print.
Not for Sale

Description

  • Copyright 1999
  • Dimensions: 7-3/8" x 9-1/4"
  • Pages: 472
  • Edition: 1st
  • Book
  • ISBN-10: 0-201-31018-X
  • ISBN-13: 978-0-201-31018-4

Over the years, KornShell has evolved into a full-featured, powerful shell language. Familiarity with KornShell enables system and network professionals to extend the user environment and automate complex system-administration tasks for huge productivity gains. Bourne and C shell programmers will appreciate KornShell’s superior string handling, stronger data typing, and broader capabilities.

Hands-On KornShell93 Programming is a self-paced tutorial that introduces you to the essentials of KornShell programming. Based almost entirely on short, focused examples that demonstrate central concepts and effective programming techniques, it will quickly bring you up to speed.

The book reflects the newest version of KornShell, KSH93. It also provides coverage of significant developments, such as CGI programming with KornShell, and offers an in-depth look at KornShell string handling.

Humorously written, the book makes it easy to learn KornShell essentials, including data types, math, pattern matching, conditions, loops, menus, command-line arguments, functions, start-up scripts, I/O, strings, variables, background processes, and CGI scripts. Highlighted "Beware" sections will warn you of potential pitfalls and keep you on the track to learning effective KornShell programming.



020131018XB04062001

Downloads

Support File(s)

Click below for Support Files related to this title:
Support Files

Supplements

Click below for Supplements related to this title:
Supplements

CD Contents

Untitled Document Download the CD Contents related to this title.

Sample Content

Downloadable Sample Chapter

Click below for Sample Chapter related to this title:
cd.pdf

chapt3.pdf

preface.pdf

Table of Contents



List of Tables.


List of Figures.


Preface … That No One Will Ever Read.


Author's Note Regarding the ksh93 Edition.


1. Before Writing Your First KornShell Scripts.


2. Getting Started.

What Shell Is Executing My Script?

Operating System Commands in a Shell Script.

BEWARE: Are You Allowed to Execute This Script?

Commenting Your Code.

BEWARE: Picking a Bad Name for Your Script.

The Usage Line.

Simple Output.

Variables.

BEWARE: Variable Names Are Case Sensitive.

Simple Input.

Obtaining the Value of a Variable.

BEWARE: The Dollar Sign in Read Statements.

Newlines, Semicolons, White Space, and Columns.

BEWARE: Confusing + and -.

Assigning a Value to a Variable.

BEWARE: Common Mistakes When Assigning Variables.

Finding Your Mistakes.

Can I Quote You on That?



3. Data Types.

If You're New to Programming … .

If You're an Experienced Programmer … .

Declaring Strings.

Declaring Integers.

Binary, Octal, Hex, and So On.

Declaring Floats.

Declaring Constants.

Declaring nameref Variables.

Declaring Arrays.

Declaring Arrays with set -A.

Printing Array Values.

BEWARE: Common Array Mistakes.

Declaring Associative Arrays.

Probing Arrays.

Declaring Structures Part I.

Declaring Structures Part II.

Arrays of Structures.



4. Math.

If You're New to Programming … .

If You're an Experienced Programmer … .

Double Parentheses.

Integer Addition, Subtraction, and Multiplication.

Integer Division.

Floating-Point Math.

Mixing Floating-Point and Integer Math.

Grouping Mathematical Operations.

BEWARE: Common Mistakes in Math Operations.

Mathematical Assignment Operators.

The Triggy Stuff.

BEWARE: Math Functions Inside Double Parentheses.

A Practical Math Example.

Math Operator Summary.



5. Pattern Matching. If You're New to Programming … .

If You're an Experienced Programmer … .

For Everyone.

The ? Wildcard.

The [char1char2...charN] Wildcard.

Character Classes.

The * Wildcard.

BEWARE: Matching Filenames.

The ?(pattern1|pattern2... |patternN) Wildcard.

BEWARE: White Space within Patterns.

The @(pattern1|pattern2... |patternN) Wildcard.

The *(pattern1|pattern2... |patternN) Wildcard.

The +(pattern1|pattern2... |patternN) Wildcard.

The !(subpattern1|subpattern2... |subpatternN) Wildcard.

Matching Subpatterns with \d.

Simple Commands Containing Patterns.

Wildcard Summary.



6. Conditions.

If You're New to Programming … .

If You're an Experienced Programmer … .

Tests on Numbers and Strings.

Comparing Numbers with if.

BEWARE: Common Mistakes Using if with Numbers.

Comparing Numbers with the ? : Operator.

BEWARE: Common Mistakes in ? :.

Compound Statements.

else and elif.

Comparing Strings with if.

Comparing Alphabetical Order with < and >.

Comparing a String to a Pattern with if.

BEWARE: Common Mistakes Comparing Strings.

Boolean AND, Boolean OR.

The case Statement.

Unexpected Values in a Case Statement.

Wildcards in a Case Statement.

Multiple Patterns in a Case Statement.

BEWARE: Common Mistakes in Case.

Tests on Files, Directories, and the Like.

BEWARE: No Filename Expansion Inside [[ ]].

What Kind of Object Is This?

Boolean NOT.

How Is This Object Protected?

Comparing the Time of Last Modification.

Mixing Tests.



7. Loops.

If You're New to Programming … .

If You're an Experienced Programmer … .

Simple While, Until, and for Loops.

Using While to Average Five Floats.

BEWARE: While Loop Not Guaranteed to Iterate.

Using a C-Style for Loop to Average Five Floats.

Using Break to Leave a Loop.

Using Continue to Skip Part of One Loop Iteration.

Using : to Create an Always True Loop.

BEWARE: The Nature of Truth. Lists in for Loops.

A List of Filenames in a for Loop.

Patterns in a for Loop.

Searching for Objects in Subdirectories.

BEWARE: Nonexistent Patterns.

A Loop within a Loop.

The break Statement within a Nested Loop.



8. Creating Menus.

A Simple Select Example.

A select with a Case.

Unexpected User Input.

Gracefully Exiting from Menus.

Repeating the Menu Selections.

Wildcards in Menu Entries.

Wildcards in case Statements.

A Practical select Example.

Menus Inside of Menus (Submenus).



9. Command Line Arguments and Positional Parameters.

If You're New to Programming … .

If You're an Experienced Programmer … .

Command Line Arguments.

Counting the Number of Command Line Arguments.

Giving the User a Choice of How to Enter Arguments.

BEWARE: Can't Put Positional Parameters to Left of =.

Default Values of Positional Parameters.

Processing Positional Parameters with shift.

Processing Positional Parameters with $* and $@.

“$*” versus “$@” Part 1.

“$*” versus “$@” Part 2.

Using the set Statement to Assign Positional Parameters.

Processing Simple Switches with getopts.

What If the User Enters an Invalid Switch?

On and Off Switches.

Processing Switch Arguments.

Processing Missing Switch Arguments.

A Command Line Containing More Than Just Switches.

BEWARE: The Colon of getopts.

Positional Parameters Syntax Overview.



10. Functions.

If You're New to Programming … .

If You're an Experienced Programmer … .

BEWARE: Two Kinds of Functions.

A Disorganized Script Without Functions.

The Same Script Organized into Functions.

Simple Function with One Argument.

BEWARE: When $1 Isn't the First Command Line Argument.

A Function with Multiple Arguments.

A Script That Calls Another Script.

Two Ways to Return Values.

Returning a Value from a Function with return.

BEWARE: $? Doesn't Stick Around Long.

Using $(...) to Return Values from a Function.

Local Variables versus Global Variables.

BEWARE: Global and Local Variables with the Same Name.

Passing Arrays as Function Arguments: Call-by-Reference.

Sorting Arrays Using Call-by-Value.

Discipline Functions Overview.

Using a .set Discipline Function to Monitor a Variable.

BEWARE: Data Type Declarations and Discipline Functions.

Using a .set Discipline Function to Constrain a Value.

Recursive Functions.

Autoloaded Functions.

BEWARE: Tricky Loading Rules.

Extending the KornShell by Writing C Functions.

Practical Example: The Game of moo.



11. Start-Up Scripts and Environments.

Start-Up Scripts.

Environments.

Dot Scripts.

Aliases.

Example of a $HOME/.profile Start-Up Script.

Example of an Environment (ENV) Script.



12. Input and Output.

If You're New to Programming … .

If You're an Experienced Programmer … .

read, REPLY, and Prompts.

Reading Three Values.

Ignoring Extraneous Input.

Reading Values Having Different Data Types.

Rushing Users to Supply Input.

The IFS Variable.

Input Longer Than One Line.

BEWARE: Put Nothing After the Backslash.

Using a Loop to Process Input.

Reading Text out of a File with <.

Putting < within a Statement.

BEWARE: Common Input Mistakes.

Up Close and Personal with the print Statement.

BEWARE: Bad Options in print Statement.

BEWARE: Wildcards within Strings.

Getting Fancy Output with the printf Statement.

BEWARE: print and printf Handle Newlines Differently.

Redirecting Standard Output with >.

BEWARE: “But It Was Right There a Second Ago!”

Appending with >>.

Mixing < and >.

Pipes.

Streams.

Redirecting Standard Error.

BEWARE: Redirecting Standard Output and Standard Error to Same File.

Opening Files with exec.

Using exec to Do I/O on Multiple Files.

Closing Streams.

Using $(...) to Assign the Output of a Command to a Variable.

Here Documents.



13. Manipulating Strings.

If You're New to Programming … .

If You're an Experienced Programmer … .

Uppercase and Lowercase.

Left Justification.

Concatenating Strings.

Reading an Entire File into One String Variable.

Search and Replace Overview.

Search and Replace Practical Example.

Isolating a Portion of a String.

Removing the Leftmost Characters in a String with #.

Removing the Rightmost Characters in a String with %.

An Application of %.

# versus ##.

% versus %%.

Using # on Numbers.

Deleting a Substring from the Middle of a String.

Pruning Branches from Pathnames.

Matching Multiple Strings on the Same Line.

Finding the Length of a String.

Parsing Strings into Words.

Parsing Strings into Characters.

Specifying Default Values.

Parsing PATH.

Practical Application: Extracting Comments From C Source Code.

String Manipulation Summary.



14. KornShell Reserved Variables.

If You're New to Programming … .

If You're an Experienced Programmer … .

.sh.edchar, .sh.edcol, .sh.edmode, .sh.edtext.

.sh.name, .sh.subscript, and .sh.value.

.sh.version.

ENV.

FIGNORE.

$?-Error Status.

HISTFILE, HISTSIZE, HISTEDIT, HISTCMD, and FCEDIT -History File.

IFS-Parsing Lines into Tokens.

LANG, LC_ALL, LC_COLLATE, LC_TYPE, and LC_NUMERIC.

LINENO-Current Line Number.

MAIL, MAILPATH, and MAILCHECK-Electronic Mail.

OPTARG and OPTIND-Values Associated with getopts.

PATH, CDPATH, and FPATH-Search Directories.

PS1, PS2, PS3, and PS4-Prompts.

BEWARE: Common Mistakes in Setting Prompts.

HOME, PWD, and OLDPWD-Login, Current, and Previous Directories.

RANDOM-Random Integer Generator.

REPLY, -, and _-Miscellaneous Input Repository.

SECONDS-Elapsed Time.

SHELL.

TERM, COLUMN, LINES-Terminal Characteristics.

TMOUT-Time Out an Unused KornShell.

VISUAL and EDITOR-Command Line Text Editors.

$$, $!, and PPID-Process ID.



15. Foreground, Background, and Signaling.

Background and Foreground.

Signaling.

How to Send a Signal to a Script.

Writing Scripts That Respond to Signals.

Catching Signals.

A Trap That Calls Another Script.

Trapping Whenever a Script Exits.

Trapping Whenever Error Status Becomes Nonzero.

Writing Your Own Debugger.

Trapping KEYBD Signals.



16. Command Line Editing and the History File.

What Is Command Line Editing?

What Is a History File?

Listing Previous Commands.

Re-Executing Previous Commands.

BEWARE: Can't Use r on Multiple Commands.

Editing Previous Commands, Then Executing Them.

The Thing You're Going to Do Anyway.

Pathname Completion.

Command Completion.



17. Writing CGI Scripts.

If You're New to CGI Programming … .

If You're an Experienced CGI Programmer … .

Forms.

Text Boxes and Password Boxes.

Checkboxes.

Radio Buttons.

Getting Started Writing CGI Programs.

BEWARE: If Your CGI Script Doesn't Work.

A CGI Script Containing More Than Just print Statements.

File I/O from CGI Scripts.

BEWARE: File Permissions.

Analyzing Form Input: The Get and Post Methods.

The Get Method.

Get Method: Multiple Input Values.

The Post Method.

Handling Special Characters.

Environment Variables Passed by the Web Server.

Browserless Browsing.

BEWARE: Moral Concerns.

Browserless Browsing for GIFs.

BEWARE: When Browserless Browsing Fails.



Appendix A: Statement and Alias Quick Reference.


Appendix B: Just Enough HTML.

Essential HTML Tags.

Headings.

Lists.

Character Tags.

Hyperlinks.

Images.



Bibliography.


Index. 020131018XT04062001

Preface

Preface

              . . . That No One Will Ever Read

Research indicates that virtually no one actually reads prefaces in computer books. In fact, this preface could be about the Loch Ness Monster for all most readers care.

But why don't people read prefaces? Is it because prefaces sometimes get too personal? (". . . and I want to thank Sal, who made this book possible.") Is it because the sentiments of nerdy authors can be a bit repulsive? (". . . Sal, my SparcStation, was always there when I needed her.") Is it because they are predictably self-deprecatory in an ironic way? (". . . and I want to thank: list of 250 noted experts goes here for reviewing drafts of this manual. Naturally all mistakes are my own.") No, when it comes right down to it, people avoid prefaces because they're boring.

It is also de rigueur for the nerdish author to explain, folksinger style, why he or she decided to write this piece. I guess this book sort of came to me while I was camping out in the glorious Rocky Mountains. I was gazing at pristine waterfalls and awe-inspiring sunsets when I said to myself, "This land must be preserved: I shall write a KornShell book." Possessed by a demonic ecological fervor, I roared down that mountain in a snowmobile, fired up a 1200-watt workstation, and wrote it all down for you. I only ask that you use the power of the KornShell for good, rather than evil.

Through the years, I've been lucky enough to get lots of feedback from my readers. What do you think they ask for? More text? No. More syntax? Definitely not. When it comes right down to it, readers consistently ask for only one thing: more examples.

So, I listened to them and based this tutorial entirely on examples. I feel that short, focused examples are more valuable than long, detailed examples, and I've written the book accordingly. The purpose of the book is not to make me look clever; it is to make you look clever. Nevertheless, I've sprinkled a few lengthy examples into the mix for those of you who enjoy that sort of thing.

When I was a mere lad, my family doctor pointed to a massive encyclopedia of pharmaceuticals and told me that he could treat 90 percent of all patients with only six different medicines. Similarly, although the KornShell is a very rich language, my goal is to focus on the common script ailments and to leave the beriberi treatment to specialists.

Beginners may be wondering, "Is this book too hard for me?" No, probably not. Programmers experienced in various languages, though not in the KornShell, are probably wondering, "Is this book too wimpy for me?" No, probably not. To help guide both kinds of readers through the book, I've marked certain sections as being more appropriate for one group or the other. Many beginners need an explanation of loops, while experienced programmers need to know how KornShell loops differ from loops in other languages.

Since the KornShell runs on all sorts of operating systems, I've tried to keep operating system dependencies to a bare minimum. Nevertheless, I do assume that readers are either working directly on the UNIX operating system or indirectly on UNIX through a package like U/WIN.

My three primary reviewers were KornShell gurus David Korn, Steve Sommars, and Glenn Fowler, all of whom gave fantastic and diplomatic criticism.

I also received important criticism and help from Tom Barstow, Dave Beckedorff, Bart Hanlon, Warren Johnson, Ed Johnston, Mark Keil, Mike Kong, Alice Lynch, Dave Penfield, Will Roaf, Frank Rubinsky, John Weiss, Daryl Winters, Teri Witham, and other people whose names I have no doubt forgotten to list. Eric Eldred and Quentin Sullivan found so many bugs in early drafts that, and I mean this as a compliment, they should have a brand of insecticide named after them.

Judy Tarutz is my long-suffering editor. In person, Judy is a kind, gentle soul with an outrageous sense of humor. Give her a red pen, though, and she turns into Conan the Barbarian. Her savage red pen cut a bloody swath through early drafts of this book. If we should chance to meet up one day, dear reader, I'll tell you all the "weak" jokes she made me take out.

I'd also like to thank the members of the Academy.

A consortium of great minds--those minds owned and operated by Ted Ricks, John Wait, Jack Danahy, and Steve Spice--led me to the KornShell and helped me define the material for this book.

Finally, I'd like to thank the person who really made this book possible: my wife and best friend, Marilyn.

Whoops, almost forgot. Naturally, all mistakes are my own.

Author's Note Regarding the ksh93 Edition

It has been a very long time since I wrote the ksh88 edition, entitled KornShell Programming Tutorial. I began to suspect as much when I noticed that of all the people acknowledged in this Preface, and I'm sure they were capital reviewer--intelligent, meticulous, helpful--the only familiar name was my wife's.

But how to resurrect a vanished book? All traces of the ksh88 edition had disappeared until 1997, when a fragment was found suspended in a piece of amber at a Chinese restaurant in Palo Alto. Working round the clock, scientists at Addison Wesley Longman were able to piece together most of the old book. When gaps were found, DNA sequences from Kernighan and Ritchie were substituted.

After reading KornShell Programming Tutorial, many readers asked me important questions such as, "How does a joke get to be in your book?" or "Couldn't you just write a preface next time and skip the rest of the stuff that came after it?" or "Did you hear the one about the traveling KornShell salesman and the system administrator's daughter?"

Actually, creating humor for this book is not as haphazard as it may seem. All jokes are put through a rigorous five-step Beta testing procedure. I need to ensure that a joke is just as funny on the tenth reading as it is on the first. Although not all Beta testers installed the jokes, I did get enough feedback to toss out a ridiculous amount of material, for example, the original start of Chapter 1 went like this:

I first saw David Korn writing shell scripts in a small club in the Village in 1946. The post-War euphoria was contagious and it wasn't long before the whole room was up and swaying to a pounding UNIX beat.

In a second edition, the author is obliged to correct the occasional error or two that cropped up in the first edition. (A special note to all of you at the Strategic Air Command--you're absolutely right guys, it was supposed to be a comma, not a semicolon.) A pair of translators, Hideyuki Hayashi and Masataka Isoya, get the credit for finding the most mistakes in the ksh88 edition. These two were incredibly rigorous and could not have been more diplomatic. ("Barry-San, every word on page 233 appears to be a typo.") Yep, the truth is out there, but a lot of it failed to work its way into the ksh88 edition. To improve accuracy, Sarah Tuttle wrote a validation suite that tests most of the sample KornShell scripts appearing in this book.

When I wrote the KornShell Programming Tutorial book, KornShell88 was beginning to make KornShell86 obsolete. As I go to press with this book, Hands-On KornShell93 Programming, KornShell93 is starting to overtake KornShell88. The KornShell93 scripts are far richer than KornShell88, and I've focused this book completely on KornShell93. If you liked KornShell88, you're going to love KornShell93.

Several reviewers strongly suggested a chapter on CGI programming with KornShell. As an avid CGI programmer, I happily agreed.

The CD accompanying this book contains the U/WIN package, created by David Korn and a cast of thousands, and now commercially marketed by Global Technologies Development. The package contains all the popular UNIX utilities--the grep's and awk's and diff's you know and recognize--all ready to run on your Windows 95 machine. The following shows how I've organized the book.

Chapter by Chapter Description
1  How the KornShell stacks up against other programming languages.
2  Writing simple KornShell scripts, executing them, debugging them, and so on.
3  Data types like strings, integers, floats, structures, arrays, and such.
4  Mathematics, which is surprisingly rich for a shell language.
5  Pattern matching, including the five uniquely KornShell wildcards.
6  Conditional evaluation.
7  Looping. You'll want to read it over and over and over again.
8  Creating simple menus with the select statement.
9  Passing arguments on the command line.
10  Functions, including regular KornShell functions, autoloaded functions, and extension functions written in C.
11  Start-up files, environments, exporting variables, and the like.
12  Input and output.
13  Manipulating strings--an area in which the KornShell excels.
14  Reserved variables like PATH and PS1. There are dozens of these.
15  Sending and trapping signals; running scripts in the background.
16  Command line editing, repeating previous commands, and such.
17  CGI scripting tutorial. The KornShell is a terrific choice for your next CGI program.
Appendix A  A quick reference of all statements in the KornShell. This appendix will become more valuable to you as your KornShell experience increases.
Appendix B  A very short HTML tutorial; this is just enough HTML to help understand what's going on in Chapter 17.

Primary reviewers for this book include John Allen, Chris Baron, Dave Beckedorff, Ann Hall, Bobby Higgins, Ollie Jones, Jeff Korn, David Korn, Charlie Northrup, and Bob Weil. Thanks also to Jason Jones, Mike Hendrickson, Marina Lang, and Marilyn Rash at Addison Wesley Longman. There's a saying in Japan that goes something like, "Everybody should climb Mt. Fuji once, but only a fool would climb it a second time." Dave Beckedorff--thanks for reviewing my book a second time. Thanks to the wonderful staff at Open Market, Inc. for their collective Web expertise.

The success of KornShell Programming Tutorial was primarily due to the collective "tough love" of its reviewers. Thank you again. Special thanks to Judy Tarutz for an editorial job that still amazes me seven years later.

And to my wife Marilyn--your love, support, and amazing patience is what really made this book.



020131018XP04062001

Updates

Errata

Hands-On KornShell93 Programming

Whoops

Page Problem
3 What it Says Microsoft does not currently ship a KornShell with Windows 98 or Windows NT. However, the CD at the back of this book contains the complete U/WIN package.
What it Should Have Said Microsoft does not currently ship a KornShell with Windows 98 or Windows NT. However, the CD at the back of this book contains a free-for-noncommercial-use version of U/WIN for Windows 95/98.
319 What it Says The trap_err_signal.ksh claims that if user does not enter an integer, $? becomes nonzero
What it Should Have Said On KornShell88, this statement is true. However, KornShell93 no longer sets $? to nonzero when the user tries to assign a noninteger value to an integer variable. The CD contains a different version of trap_err_signal.ksh.
345&346 What it Says
Content-type: text/html>
What it Should Have Said
Content-type: text/html

Hey, I want to join the fun, too; how can I report a bug?

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020