Previous Table of Contents Next


Environment Variables

Environment variables are often used to define initialization options such as the default login shell, user login name, search path, and terminal settings. Some environment variables are set for you each time you log in. You can also create your own variables and assign values to them. By convention, environment variable names are in capital letters.

Environment variables are passed on from parent to child processes. For example, an environment variable set in a shell is available to any program started in that shell, to any additional program started by the initial program, and so on. In other words, environment variables are inherited from parent to child, from child to grandchild, and so on. They are not inherited backward from parent to grandparent or child to parent.

Use the env command to display a list of current environment variables. Consult the Solaris System Administrator's Guide for more information about environment variables.

For the Bourne and Korn shells, use the following syntax to assign environment variables and export them. You must export the variable before it can be put into the environment of child processes.

VARIABLE=value;export VARIABLE

For the Korn shell, you can also use the following syntax:

export VARIABLE=value

For the C shell, use the setenv command with the following syntax to assign environment variables:

setenv VARIABLE value

Use the unsetenv command with the following syntax to remove the environment variable:

unsetenv VARIABLE

Input and Output

When you write shell scripts, you want to be able to obtain input from sources outside your scripts; for example, from another file or from keyboard input. You also want to be able to generate output both for use within the script and for display on-screen.

The following sections describe how to control input and output of a shell script using standard input, output, error, and redirection; how to accept user input (input from the keyboard) to a script; how to create "here" documents; and how to generate output to the screen.

Standard In, Standard Out, and Standard Error

When writing shell scripts, you can control input/output redirection. Input redirection is the ability to force a command to read any necessary input from a file instead of from the keyboard. Output redirection is the ability to send the output from a command into a file or pipe instead of to the screen.

Each process created by a shell script begins with three file descriptors associated with it, as shown in Figure 16-1.


Figure 16-1  File descriptors.

These file descriptors—standard input, standard output, and standard error—determine where input to the process comes from, and where the output and error messages are sent.

Standard input (STDIN) is always file descriptor 0. Standard input is the place where the shell looks for its input data. Usually data for standard input comes from the keyboard. You can specify standard input to come from another source using input/output redirection.

Standard output (STDOUT) is always file descriptor 1. Standard output (default) is the place where the results of the execution of the program are sent. Usually, the results of program execution are displayed on the terminal screen. You can redirect standard output to a file, or suppress it completely by redirecting it to /dev/null.

Standard error (STDERR) is always file descriptor 2. Standard error is the place where error messages are sent as they are generated during command processing. Usually, error messages are displayed on the terminal screen. You can redirect standard error to a file, or suppress it completely by redirecting it to /dev/null.

You can use the file descriptor numbers 0 (standard input), 1 (standard output), and 2 (standard error) together with the redirection metacharacters to control input and output in the Bourne and Korn shells. Table 16-7 shows the common ways you can redirect file descriptors.

Table 16-7 Bourne and Korn Shell Redirection

Description Command
Take STDIN from file <file, or 0<file
Redirect STDOUT to file > file, or 1>file
Redirect STDERR to file 2> file
Append STDOUT to end of file >> file
Redirect STDERR to STDOUT 2>&1
Pipe standard output of cmd1 as standard input to cmd2 cmd1 | cmd2
Use file as both STDIN and STDOUT <> file
Close STDIN <&-
Close STDOUT >&-
Close STDERR 2>&-

When redirecting STDIN and STDOUT in the Bourne and Korn shells, you can omit the file descriptors 0 and 1 from the redirection symbols. You must always use the file descriptor 2 with the redirection symbol.

The 0 and 1 file descriptors are implied, and not used explicitly for the C shell, as shown in Table 16-8. The C shell representation for standard error (2) is an ampersand (&). STDERR can only be redirected when redirecting STDOUT.

Table 16-8 C Shell Redirection Metacharacters

Description Command
Redirect STDOUT to file > file
Take input from file < file
Append STDOUT to end of file >> file
Redirect STDOUT and STDERR to file >& file
Append STDOUT and STDERR to file >>& file


Previous Table of Contents Next