Qshell PDF
Qshell PDF
Qshell PDF
System i
Programming
Qshell
Version 6 Release 1
IBM
System i
Programming
Qshell
Version 6 Release 1
Note
Before using this information and the product it supports, read the information in “Notices,” on
page 203.
This edition applies to version 6, release 1, modification 0 of i5/OS (product number 5761-SS1) and to all
subsequent releases and modifications until otherwise indicated in new editions. This version does not run on all
reduced instruction set computer (RISC) models nor does it run on CISC models.
© Copyright IBM Corporation 2008.
US Government Users Restricted Rights – Use, duplication or disclosure restricted by GSA ADP Schedule Contract
with IBM Corp.
Contents
Qshell . . . . . . . . . . . . . . . 1 Utilities for working with files and directories . . 75
PDF file for Qshell . . . . . . . . . . . . 1 Utilities for reading and writing input and
Tutorial . . . . . . . . . . . . . . . . 2 output. . . . . . . . . . . . . . . 125
Qshell command language features . . . . . . 2 Utilities for developing Java programs . . . . 130
Qshell utility features . . . . . . . . . . 4 Utilities for managing jobs . . . . . . . . 138
Putting it all together in a script . . . . . . . 6 Utilities for Kerberos credentials and key tables 147
Command language . . . . . . . . . . . . 7 Utilities for LDAP directory server . . . . . 147
Quoting . . . . . . . . . . . . . . . 7 Utilities for working with parameters and
Parameters . . . . . . . . . . . . . . 7 variables . . . . . . . . . . . . . . 147
Variables. . . . . . . . . . . . . . . 8 Utilities for writing scripts . . . . . . . . 155
Word expansions . . . . . . . . . . . 13 Miscellaneous utilities . . . . . . . . . 161
Redirection . . . . . . . . . . . . . 19 Application Programming Interfaces. . . . . . 178
Simple commands . . . . . . . . . . . 20 QzshSystem() - Run a QSH Command . . . . 178
Pipelines . . . . . . . . . . . . . . 21 QzshCheckShellCommand() - Find QSH
Lists . . . . . . . . . . . . . . . . 22 Command . . . . . . . . . . . . . 182
Compound commands . . . . . . . . . 23 Examples: Using a remote client that connects to a
Using Qshell . . . . . . . . . . . . . . 27 qsh session . . . . . . . . . . . . . . 183
Using a Qshell interactive session . . . . . . 27 Example: Server program . . . . . . . . 184
Running Qshell commands from CL . . . . . 29 Example: Client program . . . . . . . . 191
Running Qshell commands from PASE . . . . 30 Example: Creating and running the server
Customizing the Qshell environment . . . . . 30 program . . . . . . . . . . . . . . 200
National language support (NLS) considerations 31 Example: Creating and running the client
Performance considerations . . . . . . . . 35 program . . . . . . . . . . . . . . 201
Developing your own utilities . . . . . . . 36 Related information for Qshell. . . . . . . . 202
Editing files with Qshell Interpreter . . . . . 36
Differences with other interpreters. . . . . . 36 Appendix. Notices . . . . . . . . . 203
Utilities. . . . . . . . . . . . . . . . 37 | Programming interface information . . . . . . 205
Utilities for defining aliases . . . . . . . . 42 Trademarks . . . . . . . . . . . . . . 205
Utilities for running commands. . . . . . . 43 Terms and conditions. . . . . . . . . . . 205
Utilities for managing data . . . . . . . . 57
Utilities for DB2 Universal Database . . . . . 74
Together, the shell interpreter and utilities provide a powerful, standards-based scripting environment. As
you use the new programming models offered by i5/OS™, Qshell provides an extensible command
environment that allows you to do the followings tasks:
v Manage files in any file system supported by the Integrated File System.
v Run threaded programs that do thread-safe I/O to and from an interactive session.
v Write shell scripts that can be run without modification on other systems using a cross-platform
command language.
v Write your own utilities to extend the functions provided by Qshell.
This topic provides both new and experienced users with the information needed to use Qshell
commands and write Qshell scripts.
Note: In this information, the terms "job" and "process" are used interchangeably. The term "job" is from
i5/OS and the term "process" is from POSIX.
To view or download the PDF versions of this document, select Qshell (about 2198 KB).
This topic provides a tutorial to help you get started using the Qshell command language and utilities.
The shell interpreter can be used for either an interactive session or for writing shell scripts. A shell script
is just a text file that contains shell commands. The Qshell command language is identical for either
interactive use or for writing scripts. Any command that you run from an interactive command line can
be put in a shell script and it runs the same way. The Qshell command language is interpreted so a shell
script is read and interpreted each time it is run.
Commands
A simple command is the name of a utility that you want to run. If you specify a fully-qualified path
name to the command, for example "/usr/bin/ls", qsh runs that command. If you specify a relative path
name to the command, for example "ls", qsh searches the directories specified by the PATH variable to
find it. The PATH variable is a colon delimited list of directories that tells qsh where to find commands.
If the PATH variable is set to
/usr/bin:.:/QOpenSys/usr/bin
qsh first looks for the command in the "/usr/bin" directory, then in the current working directory, and
finally in the "/QOpenSys/usr/bin" directory. When the PATH variable begins or ends with a colon,
contains two adjacent colons or specifies a dot (.) as a directory, qsh searches in the current working
directory.
By default, qsh waits for the command to complete before running the next command. When the
command is completed, it sets an exit status that describes the result of the command. An exit status of
zero means that the command was successful. An exit status that is greater than zero means that the
command was unsuccessful. Typically, the exit status is one when a command fails. Although, qsh sets
the exit status to 126 when the command was found but could not be run and sets the exit status to 127
when the command was not found.
The compound commands include the if-then-else conditional, [[...]] conditional, case conditional, select
conditional, while loop, until loop, for loop, and functions. These commands provide the features you
would expect in a high-level programming language and allow you to write complex shell scripts.
A pipeline allows you to chain several commands together so the output from one command is the input
to the next command. For example, in the pipeline
ls | grep ^apple
the output from the ls utility becomes the input to the grep utility. The ls utility lists the contents of a
directory and the grep utility searches for matches to a pattern. The final output of the above pipeline is
a list of the files in the current directory that begin with "apple".
You can chain more than two commands in a pipeline. This is a very powerful feature of qsh that allows
you to combine several commands together to accomplish a complex task.
An asynchronous list runs a command in the background. For example, the command
mypgm &
allows you to start mypgm and then run other commands before mypgm completes. If you have a long
running command, an asynchronous list allows you to start the command and not wait for the command
to complete.
Input and output redirections allow you to change where input for a command comes from and where
output for the command goes to. For Qshell commands, input and output work on descriptors. A
descriptor can be opened to either an object in the Integrated File System or to a TCP/IP socket. Input
comes from descriptor 0 or standard input, regular output goes to descriptor 1 or standard output, and
error output goes to descriptor 2 or standard error.
You can change where input comes from by redirecting standard input. For example, in the command
grep orange <fruits.list
when the grep utility reads from standard input it receives the contents of the file fruits.list.
You can change where output goes to by redirecting standard output. For example, in the command
grep apple fruits.list >apple.list
when the grep utility writes the results to standard output, the results are written to the file apple.list.
You can also send standard output and standard error to the same file. For example, in the command
grep apple fruits.list >apple.list 2>&1
standard output (descriptor 1) is written to the file apple.list and standard error (descriptor 2) is
redirected to the same place as descriptor 1.
While most of the time redirections are only used to control standard input, standard output, and
standard error, you can control the descriptors from 0 to 9 using redirections.
A path name expansion substitutes a pattern for all of the files that match the pattern. A shell pattern
uses:
v A * to match any string of characters. For example, in the command
ls *.java
qsh expands *.java to all of the files that end with .java in the current working directory.
v A ? to match any single character. For example, in the command
ls *.?
qsh expands *.? to all of the files that have a single character extension.
v A [ ] for a character class. With a character class, qsh matches a set or range of characters. For example,
in the command
ls *.[ch]
Qshell 3
qsh expands *.[ch] to all of the files that end in either .c or .h in the current working directory. You can
also specify a range of characters. For example, in the command
ls *.jav[a-c]
qsh expands *.jav[a-c] to all of the files that end in .java, .javb, or .javc.
Parameter expansions
There are modifiers to use default or alternate values or to indicate an error if the variable is unset or
null. For example, in the parameter expansion
${counter:=0}
qsh sets the default value of the variable counter to zero if the variable is unset or null. If the variable
counter was already set, the value is not changed and the current value is substituted.
There are also modifiers to remove small or large prefix or suffix patterns. The patterns are the same as
the ones used for path name expansions. There are four pattern modifiers:
v The % modifier means to remove the smallest suffix pattern.
v The %% modifier means to remove the largest suffix pattern.
v The # modifier means to remove the smallest prefix pattern.
v The ## modifier means to remove the largest prefix pattern.
For example, if the variable pathname is set to "/fruits/apples/grannysmith", then in the parameter
expansion
${pathname%/*}
qsh removes the smallest right pattern that matches "/*" and "/fruits/apples" is substituted.
Command substitutions
A command substitution allows the output of a command to be substituted in place of the command
name. For example, in the command substitution
$(grep apple fruit.list)
qsh substitutes the output of the grep command. This is an easy way to capture the output of a
command for further processing in a script.
An older form of command substitution that uses backquotes (`) is supported but should not be used
because of its ambiguous quoting rules.
There are over 100 utilities provided with Qshell that provide many functions. A utility is one of two
types:
v A built-in utility is one qsh can run directly without having to search for it. It runs in the same process
as the shell interpreter.
A Qshell utility has the following format. The square brackets indicate something that is optionally
specified.
utility [ options ] [ parameters ]
Some utilities allow single letter options preceded by a minus sign (-). For example, several utilities use
the -r option for recursively working on a directory tree. More than one option can be specified and all
options must be specified before any parameters. If a parameter begins with a minus sign, you can use
the -- option to indicate the end of options. For example, in the command line
utility -r -- -1
the -1 is treated as a parameter because the -- marked the end of the options.
When navigating in the Integrated File System, you always have a current working directory. If a file or
directory is specified without a leading slash (/), it is assumed to be in the current working directory.
You can change the current working directory with the cd utility. For example to change the current
working directory to /usr/bin, use this command:
cd /usr/bin
You can display your current working directory with either the pwd or pwdx utilities. The pwdx utility
resolves symbolic links and displays the absolute current working directory.
You can list the contents of a directory with the ls utility. With no parameters, ls lists the contents of the
current working directory. You can also specify one or more directories as parameters. With the -l
(lowercase ell) option, ls lists detailed information about each object in the directory, including the
permissions for the object, the owner and group of the object, the size of the object, and the date that the
object was last accessed.
You can create a new directory with the mkdir utility. When the -p option is specified, mkdir creates all
of the directories in the path. For example, to create the new directories "/fruits" and "/fruits/pears", use
this command:
mkdir -p /fruits/pears
You can copy files with the cp utility. For example, to copy the file "/fruits/apples/delicious" to the file
"/fruits/apples/grannysmith", use this command:
cp /fruits/apples/delicious /fruits/apples/grannysmith
You can rename or move objects with the mv utility. For example, to move the file orange in the current
directory to the file "tangerine" in the "/fruits" directory, use this command:
mv orange /fruits/tangerine
You can delete an object with the rm utility and delete a directory with the rmdir utility. When the -r
option is specified, rm recursively deletes all of the objects in a directory tree. This is an easy way to
delete a large number of objects with one command. For example, to delete all of the files and directories
in the "/fruits" directory tree, use this command:
rm -r /fruits
Qshell 5
Putting it all together in a script
View an example that shows how to write a shell script.
The following example shows a simple shell script that illustrates the features of the shell interpreter and
utilities. The script takes one input parameter that is the name of a directory. The script then copies all of
the files with the .java extension from the input directory to the current directory, keeping a count of the
files it copied.
1 # Get a list of files
2 filelist=$(ls ${1}/*.java)
3 count=0
4 # Process each file
5 for file in $filelist ; do
6 # Strip directory name
7 target=${file##*/}
8 # Copy file to current directory
9 cp $file $target
10 count=$((count+=1))
11 # Print message
12 print Copied $file to $target
13 done
14 print Copied $count files
On lines 1, 4, 6 ,8, 11, the # character denotes a comment. Any characters after the # character are not
interpreted by qsh.
On line 2, the variable filelist is set to the output from the ls command. The ${1} expands to the first
input parameter and the *.java expands to all of the files with the .java extension.
On line 5 is a for loop. For each iteration of the loop. the variable file is set to the next element in the
variable filelist. Each element is delimited by a field separator. The default field separators are tab, space,
and newline. The semicolon character is a command delimiter and allows you to put more than one
command on a line.
On line 7, the variable target is set to the file name from the fully-qualified path name. The ${file##*/}
parameter expansion removes the largest pattern starting from the left that matches all characters up to
the last slash character.
On line 9, the file is copied with the cp utility from the specified directory to the current working
directory.
On line 12, a message is printed using the print utility with the files that were copied.
On line 13, the done marks the end of the for loop.
On line 14, a message is printed with the total number of files that were copied.
If the directory /project/src contained two files with the .java extension and the script is called using the
command:
javacopy /project/src
Command language
This detailed reference information is a good starting point if you are writing shell scripts or are an
experienced user of shells.
qsh implements a command language that has flow control constructs, variables, and functions. The
interpretative language is common to both interactive and non-interactive use (shell scripts). So the same
commands that are entered at an interactive command line can also be put in a file and the file can be
run directly by qsh.
See the AIX® Information Center for more information about commands.
Related tasks:
“qsh - Qshell command language interpreter” on page 49
Quoting
Use quoting to remove the special meaning of certain characters to qsh.
Parameters
A parameter is used to store data.
You can access the value of a parameter by preceding its name with a dollar sign ($) and surrounding the
name with brackets ({ }). The brackets are optional when the name is a single digit, is a special parameter,
or is a single identifier.
Positional parameters
Qshell 7
A positional parameter is a decimal number starting from one. Initially, qsh sets the positional parameters
to the command line arguments that follow the name of the shell script. The positional parameters are
temporarily replaced when a shell function is called and can be reassigned using the set and shift
utilities.
Special parameters
Variables
When it is started, qsh initializes shell variables from the defined environment variables. A variable is
used to store data. .
You can change the value of an existing variable or create a new variable by using one of these methods:
v Assigning a variable using name=value.
v Calling the read or getopts utilities.
v Using the name parameter in a for loop or select conditional construct.
v Using the ${name=value} parameter expansion.
Variable names can contain alphabetic characters, numeric characters, or the underscore (_). A variable
name cannot begin with a numeric character.
Qshell 9
PPID (Parent process ID)
This variable is set by qsh to the decimal process ID of the process that invoked the current shell.
In a subshell, the value of the variable is not changed even if the subshell is running in a
different process.
PWD (Working directory)
This variable is set by cd to the current working directory after it is changed.
QSH_VERSION (Current version)
This variable is set by qsh to a string that represents the current version. The string is in the form
VxRyMz where x is the version number, y is the release number, and z is the modification
number. This variable is read-only.
RANDOM (Random number generator)
This variable is set by qsh to an integer random number between 1 and 32767 each time it is
referenced. You can seed the random number generator by setting the variable.
REPLY (Reply variable)
This variable is set by read to the characters that are read when you do not specify any
arguments and by the select compound command to the contents of the input line read from
standard input.
TERMINAL_TYPE (Type of terminal)
This variable is set by qsh to the type of terminal attached to the standard file descriptors. The
value is set to "5250" when attached to a 5250 display, to "REMOTE" when attached to a remote
client, or to "PIPELINE" when attached to pipes.
UID (User identifer)
This variable set by qsh to the user identifier of the process at the time qsh is started. This
variable is read-only.
Qshell 11
QIBM_CHILD_JOB_SNDINQMSG (Send inquiry message when child process starts)
When this variable is set to a positive numeric value, the parent process is sent an inquiry
message with the qualified job name of the child process. The child process is held until you
reply the message. By setting this variable, you can debug the program running in the child
process by setting breakpoints before the program runs. The value of the variable is the level of
descendant processes to debug. When set to 1, child processes are held, when set to 2 child and
grandchild processes are held, etc. There is no default value.
QIBM_MULTI_THREADED (Start multi-thread capable processes)
This variable determines if processes started by qsh can create multiple threads. When the value
of the variable is "Y", all child processes started by qsh can start threads. The default value is "N".
QSH_REDIRECTION_TEXTDATA (Process data as text for file redirection)
This variable determines if data read from or written to a file specified on a redirection is treated
as text data or binary data. When the value of the variable is "Y", qsh treats the data read from or
written to the file as text data. When the value of the variable is not "Y", qsh treats the data read
from or written to the file as binary data. The default value is "Y".
QSH_USE_PRESTART_JOBS (Use pre-start jobs when available)
This variable determines if processes started by qsh use prestart jobs when available. When the
value of the variable is "Y", qsh uses prestart jobs if they are available in the current subsystem.
When the value of the variable is not "Y", or prestart jobs are not available, the processes started
by qsh are batch immediate jobs. The default value is "Y".
SHELL (Path name of the shell)
When running a script file that does not contain "#!" on the first line, qsh uses the value of this
variable as the path name of the shell interpreter to run the script. There is no default value.
TRACEFILE (Path name of trace file)
When the trace option is set, qsh uses the value of this variable as the path name of the file to
store the trace information. The default value is "$HOME/qsh_trace".
TRACEOPT (Options for trace file)
When the trace option is set, qsh uses the value of this variable to determine how to handle the
trace file. When the value of the variable is "UNLINK", qsh unlinks the trace file before opening
it in a root shell. When the value of the variable is "KEEP", qsh keeps the current trace file. The
default value is "UNLINK".
Other variables
QIBM_CMP_FILE_SIZE
This variable controls the maximum file size in bytes that cmp reads into an internal buffer for
better performance. For files larger than the maximum size, cmp reads the files one byte at a
time.
QIBM_OD_OUTPUT_FORMAT (Output format for od)
This variable controls the output format for the od utility. If the value is "OLD", od uses the old
format from previous releases. The old format is not compatible with the current industry
standard and its use is discouraged. There is no default value.
QIBM_QSH_CMD_ESCAPE_MSG (Send escape messages from QSH CL command)
This variable controls how messages are sent by the QSH CL command when the CMD
parameter is specified. If the value is "Y", the QSH0005 message is sent as an escape message if
the exit status is greater than zero and the QSH0006 and QSH0007 messages are always sent as
escape messages. There is no default value.
QIBM_QSH_CMD_OUTPUT (Control output of QSH CL command)
This variable controls the output from the QSH CL command when the CMD parameter is
specified. If the value is "STDOUT", the output is displayed on the C runtime terminal session. If
Word expansions
View information about word expansions, including tilde expansion, parameter expansion, command
substitution, arithmetic expansion, field splitting, path name expansion, and quote removal.
Tilde expansions
Select this link to view information about how qsh expands tilde characters.
An unquoted tilde character (~) at the beginning of a word is expanded according to the following rules:
v ~ expands to the value of the HOME variable (the current user's home directory).
v ~user expands to the home directory of the specified user. All the characters up to a slash (/) or the
end of the word are treated as a user name.
v ~+ expands to the value of the PWD (working directory) variable.
v ~- expands to the value of the OLDPWD (previous working directory) variable if it is set.
Examples
1. Change the current directory to the user's home directory:
cd ~
2. Change the current directory to the bin directory in user smith's home directory:
cd ~smith/bin
Parameter expansions
Select this link to view information about how qsh expands parameters.
${expression}
Qshell 13
where expression consists of all characters until the matching right brace (}). Any right brace characters
escaped by a backslash or within a string with quotation marks, as well as characters in embedded
arithmetic expansions, command substitutions, and variable expansions, are not examined in determining
the matching right brace.
${parameter}
The value, if any, of parameter is substituted. The parameter name or symbol can be enclosed in braces,
which are optional except for positional parameters with more than one digit or when parameter is
followed by a character that might be interpreted as part of the name. If a parameter expansion occurs
inside double quotation marks, then:
1. Path name expansion is not performed on the results of the expansion.
2. Field splitting is not performed on the results of the expansion, with the exception of @ special
parameter.
In the preceding four parameter expansions, using a colon in the format results in a test for a parameter
that is unset or null; removing the colon results in a test for a parameter that is only unset.
${#parameter}
String Length. If parameter is @ or *, the number of positional parameters is substituted.
Otherwise, the length of the value of parameter is substituted.
${parameter%word}
Remove Smallest Suffix Pattern. The word is expanded to produce a pattern. Then the result is
parameter after removing the smallest portion of the suffix matched by the pattern.
${parameter%%word}
Remove Largest Suffix Pattern. The word is expanded to produce a pattern. Then the result is
parameter after removing the largest portion of the suffix matched by the pattern.
${parameter#word}
Remove Smallest Prefix Pattern. The word is expanded to produce a pattern. Then the result is
parameter after removing the smallest portion of the prefix matched by the pattern.
${parameter##word}
Remove Largest Prefix Pattern. The word is expanded to produce a pattern. Then the result is
parameter after removing the largest portion of the prefix matched by the pattern.
Examples
1. Expand the variable QSH_VERSION.
echo ${QSH_VERSION}
2. Expand the variable filename and use a default value.
echo ${filename:-/tmp/default.txt}
3. Expand the variable index and assign a default value.
echo ${index:=0}
4. Expand the variable filename and indicate an error if unset.
echo ${filename:?Variable is not set}
5. Expand the variable DIRLIST using string length.
DIRLIST=/usr/bin:/home/mike
echo ${#DIRLIST}
6. Expand the variable DIRLIST using remove smallest suffix pattern.
DIRLIST=/usr/bin:/home/mike
echo ${DIRLIST%/*}
7. Expand the variable DIRLIST using remove largest suffix pattern.
DIRLIST=/usr/bin:/home/mike
echo ${DIRLIST%%:*}
8. Expand the variable DIRLIST using remove smallest prefix pattern.
DIRLIST=/usr/bin:/home/mike
echo ${DIRLIST#/usr}
9. Expand the variable DIRLIST using remove largest prefix pattern.
DIRLIST=/usr/bin:/home/mike
echo ${DIRLIST##*/}
10. Expand the variable DIRLIST using a substring starting at offset.
DIRLIST=/usr/bin:/home/mike
echo ${DIRLIST:5:3}
11. Expand the variable DIRLIST using a substitute string for pattern.
DIRLIST=/usr/bin:/home/mike
echo ${DIRLIST/m?ke/joel}
Related concepts:
“Parameters” on page 7
A parameter is used to store data.
Command substitutions
Select this link to view information about how qsh expands command substitutions.
Qshell 15
Command substitution allows the output of a command to be substituted in place of the command name
itself. Command substitution occurs when the command is enclosed as follows:
$(command)
or by using backquotes:
`command`
The shell expands the command substitution by running command in a subshell environment and
replacing the command substitution with the standard output of the command, removing sequences of one
or more <newline>s at the end of the substitution. Embedded <newline>s before the end of the output
are not removed; however, during field splitting, they may be translated into <space>s, depending on the
value of the IFS variable and quoting that is in effect.
Examples
1. Set the variable list to the output of the ls command:
list=$(ls)
Arithmetic expansions
Select this link to view information about how qsh expands arithmetic expressions.
Arithmetic expansion provides a mechanism for evaluating an arithmetic expression and substituting its
value. The format for arithmetic expansion is:
$((expression))
The expression is treated as if it were in double quotation marks, except that a double quotation mark
inside expression is not treated specially. The shell expands all tokens in expression for parameter
expansion, command substitution, and quote removal. qsh treats the result as an arithmetic expression
and substitutes the value of the expression.
Arithmetic expressions
qsh performs either integer or floating point arithmetic based on the setting of the float option. When the
float option is set on, qsh performs floating point arithmetic.
Arithmetic expressions use the following ANSI C language operators and precedence.
(expression)
Parenthesis overrides precedence rules
Unary operators
+expression Unary +
-expression Unary -
~expression Bitwise negation
!expression Logical negation
Multiplicative operators
expression * expression Multiplication
expression / expression Division
expression % expression Remainder
Additive operators
expression + expression Addition
expression - expression Subtraction
Bitwise shift operators
expression << expression Left shift the first expression by the number of bits given in the second
expression
expression >> expression Right shift the first expression by the number of bits given in the second
expression
Relational operators
expression < expression Less than
expression <= expression Less than or equal to
expression > expression Greater than
expression >= expression Greater than or equal to
Bitwise AND operator
expression & expression Bitwise and where the result contains a 1 in each bit position where there
is a 1 in both expressions and a 0 in all other bit positions.
Bitwise Exclusive OR operator
expression ^ expression Bitwise exclusive or where the result contains a 1 in each bit position where
there is a 1 in only one of the expressions and a 0 in all other bit positions.
Bitwise OR operator
expression | expression Bitwise or where the result contains a 1 in each bit position where there is a
1 in either expression and a 0 in all other bit positions.
Logical AND operator
expression && expression Logical and where the result is true if both expressions are true
Logical OR operator
expression || expression Logical or where the result is true if one of the expressions is true
Qshell 17
Conditional operator
expression ? expression : expression Conditional operator where when the first expression is true, the
second expression is evaluated. Otherwise the third expression is evaluated.
Assignment operators
expression = expression Simple assignment
expression *= expression Assign and multiply
expression /= expression Assign and divide
expression %= expression Assign and remainder
expression += expression Assign and add
expression -= expression Assign and subtract
expression <<= expression Assign and shift left
expression >>= expression Assign and shift right
expression &= expression Assign and bitwise AND
expression ^= expression Assign and bitwise exclusive OR
expression |= expression Assign and bitwise OR
Examples
1. Add two decimal numbers:
echo $((2+2))
2. Add two hexadecimal numbers:
echo $((16#A + 16#20))
3. Increment the variable index by one:
let index+=1
4. Evaluate a complex expression:
echo $((5+9-2*3/2))
5. Add two floating point numbers:
set -F
echo $((5.75+9.157))
set +F
Field splitting
Select this link to view information about how qsh splits fields into words expands path names using
patterns, and remove quotation marks.
After parameter expansion, command substitution, and arithmetic expansion, qsh scans the results of
expansions and substitutions that did not occur in double quotation marks for field splitting. Multiple
fields can result.
qsh treats each character of the IFS variable as a delimiter and uses the delimiters to split the results of
parameter expansion and command substitution into fields. If the value of the IFS variable is null, no
field splitting is performed.
When the noglob option is not set, path name expansion is performed after field splitting is complete.
Each word is viewed as a series of patterns, separated by slashes. The process of expansion replaces the
word with the names of all existing files whose names can be formed by replacing each pattern with a
string that matches the specified pattern. There are two restrictions:
1. a pattern cannot match a string containing a slash
2. a pattern cannot match a string starting with a period unless the first character of the pattern is a
period
Quote removal
The quote characters, backslash (\), single quotation mark (`), and double quotation mark ("), are
removed unless the character has been quoted.
Patterns
Select this link to view information about how qsh expands patterns.
A pattern consists of normal characters, which match themselves, and meta-characters. The
meta-characters are:
!, *, ?, and [
These characters lose their special meanings if they are quoted. When command or variable substitution
is performed and the dollar sign ($) or backquote (`) are not double quoted, the value of the variable or
the output of the command is scanned for these characters and they are turned into meta-characters.
A left bracket ([) introduces a character class. The end of the character class is indicated by a right bracket
(]). If the right bracket is missing then the left bracket matches a [ rather than introducing a character
class. A character class matches any of the characters between the square brackets. A range of characters
may be specified using a minus (-). The character class may be complemented by making an exclamation
mark (!) the first character of the character class.
To include a right bracket in a character class, make it the first character listed (after the !, if any). To
include a minus in a character class, make it the first or last character listed.
Redirection
Redirections are used to change where a command reads its input or sends its output. In general,
redirections open, close, or duplicate an existing reference to a file.
[ n ] redir-op file
where redir-op is one of the redirection operators listed below and n is an optional number that refers to a
file descriptor. Following is a list of the possible redirections.
Qshell 19
[ n ]< file
Redirect standard input (or n) from file.
[ n1 ]<&n2
Duplicate standard input (or n1) from file descriptor n2.
[ n ]<&-
Close standard input (or n).
[ n ]> file
Redirect standard output (or n) to file.
[ n ]>| file
Redirect standard output (or n) to file, but override the noclobber option.
[ n ]>> file
Append standard output (or n) to file.
[ n1 ]>&n2
Duplicate standard output (or n1) from n2.
[ n ]>&-
Close standard output (or n).
It is best not to use the /QSYS.LIB/QTEMP.LIB directory for redirections since it is deleted when a job
ends and a new job is started and ended for each command.
Here-documents
delimiter
All the text on successive lines up to delimiter is saved and made available to the command on standard
input, or file descriptor n if it is specified. If delimiter as specified on the initial line is quoted, then
here-doc-text is treated literally, otherwise the text is subjected to parameter expansion, command
substitution, and arithmetic expansion. If the operator is <<- instead of <<, then leading tabs in
here-doc-text are stripped.
Simple commands
A simple command is a sequence of optional variable assignments and redirections followed by a
command name.
If a simple command does not contain any slashes, qsh finds the command by searching:
1. for a special built-in utility of that name, then
2. for a shell function of that name, then
3. for a regular built-in utility of that name, then
4. each directory in the PATH variable in turn for the regular utility.
Command names containing a slash (/) are run as a regular utility without performing any of the above
searches.
A built-in utility is run internal to the shell, without starting a new process. A special built-in utility is
different from a regular built-in utility in these respects:
1. A syntax error in a special built-in utility causes a non-interactive shell to exit.
2. Variable assignments specified with a special built-in utility remain in effect after the utility
completes.
These are the special built-in utilities: break, colon, continue, declare, dot, eval, exec, exit, export, local,
readonly, return, set, shift, source, trap, typeset, and unset.
When a shell function is run, all of the shell positional parameters (except the special parameter 0, which
remains unchanged) are set to the arguments of the shell function. The variables which are explicitly
placed in the environment of the command (by placing assignments to them before the function name)
are made local to the function and are set to the specified values. The positional parameters are restored
to their original values when the shell function completes.
When a regular utility is run, qsh starts a new process, passing the arguments and the environment to
the program. If the program is a shell script, qsh will interpret the program in a subshell. qsh will
reinitialize itself in this case, so that the effect will be as if a new shell had been invoked to handle the
shell script.
Each command has an exit status that can influence the behavior of other shell commands. By
convention, a command exits with zero for normal or success, and non-zero for failure, error, or a false
indication. The documentation for each command describes the exit codes it returns and what they mean.
The exit status can be one of these values:
v 0 for success.
v 1 to 125 for failure.
v 126 when qsh finds the command but it is not executable.
v 127 when qsh cannot find the command.
v 128 and above when the command is ended by a signal. The value is 128 plus the signal number.
Pipelines
A pipeline is a sequence of one or more commands separated by the pipeline control operator (|). The
standard output of all but the last command is connected to the standard input of the next command.
Qshell 21
The standard output of command1 is connected to the standard input of command2. The standard input,
standard output, or both of a command is considered to be assigned by the pipeline before any
redirection specified by redirection operators that are part of the command. The exit status of the pipeline
is the exit status of the last command.
If the pipeline is not in the background (described below), qsh waits for all commands to complete.
If the reserved word ! does not precede the pipeline, the exit status is the exit status of the last command
specified in the pipeline. Otherwise, the exit status is the logical not of the exit status of the last
command. That is, if the last command returns zero, the exit status is 1; if the last command returns
greater than zero, the exit status is zero.
Because pipeline assignment of standard input or standard output or both takes place before redirection,
it can be modified by redirection. For example:
sends both the standard output and standard error of command1 to the standard input of command2.
Lists
A list is a sequence of commands separated by an ampersand (&) or a semicolon (;), and optionally
terminated by a <newline>, ampersand, or semicolon.
An AND-OR list is a sequence of commands separated by a && or ||. Both operators have the same
priority.
Asynchronous lists
If a command is terminated by the control operator ampersand (&), qsh runs the command
asynchronously. That is, qsh does not wait for the command to finish before running the next command.
The format for running a command in the background is:
If the interactive option is not set, the standard input of any asynchronous command is set to
/dev/qsh-stdin-null. The exit status of an asynchronous list is the exit status of the last command.
Sequential lists
Commands that are separated by a semicolon (;) are run sequentially. The format for a sequential list is:
The commands in the list are run in the order they are written. The exit status of a sequential list is the
exit status of the last command.
AND lists
With an AND list, qsh runs command1, and then runs command2 if the exit status of the command1 is zero
and so on until a command has a non-zero exit status or there are no commands left to run. The exit
status of an AND list is the exit status of the last command that is run.
With an OR list, qsh runs command1, and then runs command2 if the exit status of the command1 is
non-zero and so on until a command has a zero exit status or there are no commands left to run. The exit
status of an OR list is the exit status of the last command that is run.
Compound commands
Compound commands provide control flow for other commands. Each compound command starts with a
reserved word and has a corresponding reserved word at the end.
Related tasks:
“declare - Declare variables and set attributes” on page 147
Grouping commands
Select this link to view information about the grouping commands.
( list )
or
{ list; }
Examples
1. Group two commands in a subshell.
( ls | grep apple )
If command
Select this link to view information about the if-then-else-fi command.
if list1
then list2
[ elif list3
[ else list5 ]
fi
First, qsh runs list1 and if its exit status is zero then qsh runs list2. Otherwise, each elif list3 is run and if
its exit status is zero then qsh runs list4. Otherwise, qsh runs list5.
Qshell 23
Examples
1. An if-then-fi command.
x=4
y=9
if test $x -lt $y
then
echo $x is less than $y
fi
2. An if-then-else-fi command.
x=10
y=9
if test $x -lt $y
then
echo echo $x is less than $y
else
echo echo $x is greater than or equal to $y
fi
3. An if-then-elif-else-fi command.
x=4
y=4
if test $x -lt $y
then
echo echo $x is less than $y
elif test $x -eq $y
then
echo $x is equal to $y
else
echo $x is greater than or equal to $y
fi
Conditional command
Select this link to view information about the conditional command.
[[ expression ]]
It returns a status of 0 or 1 depending on the evaluation of the conditional expression expression. The
format of a conditional expression is the same as the expressions evaluated by the test utility. qsh
performs tilde expansion, parameter expansion, arithmetic expansion, command substitution, and quote
removal on expression before it is evaluated.
Examples
1. A conditional command that uses a command substitution.
if [[ $(grep -c apple fruits.txt) -eq 0 ]]
then
echo There are no apples in fruit.txt
fi
Case command
Select this link to view information about the case-esac command.
case word in
pattern1 ) list1 ;;
esac
qsh expands each pattern in turn and sees if it matches the expansion of word. When there is a match, qsh
runs the corresponding list. After the first match, no more patterns are expanded. See Patterns for more
details on patterns.
Examples
1. A case command for processing command line options.
while getopts ap:t: c ; do
case $c in
a) aflag=1;;
p) pflag=1
path=$OPTARG;;
t) time=$OPTARG;;
*) print -u2 "Invalid option"
exit 1;;
esac
done
Select command
Select this link to view information about the select-do-done command.
do list
done
The words are expanded, generating a list of items. If word is not specified, the positional parameters are
expanded. The set of expanded words is written to standard error, each preceded by a number. The PS3
prompt is then displayed and a line is read from standard input. If the line consists of a number
corresponding to one of the displayed words, qsh sets the value of name to the word corresponding to
the number. If the line is empty, qsh displays the list again. The REPLY variable is set to the contents of
the input line.
qsh runs the commands in list until a break, return, or exit command is run. select also completes if EOF
is read from standard input.
Examples
1. A select command to select from a list.
PS3="Please select a number "
list="alpha beta gamma delta epsilon"
select value in $list ; do
echo Value for selection $REPLY is $value
break
done
While command
Select this link to view information about the while-do-done command.
while list1
Qshell 25
do list2
done
qsh runs the two lists repeatedly while the exit status of list1 is zero. When the exit status of list1 is
non-zero the command completes.
Examples
1. A while command to iterate until a condition is met.
max=100
index=0
while [[ $index -lt $max ]] ; do
echo Index is $index
let index+=1
done
Until command
Select this link to view information about the until-do-done command.
until list1
do list2
done
qsh runs the two lists repeatedly while the exit status of list1 is non-zero. When the exit status of list1 is
zero the command completes.
Examples
1. An until command to iterate until a condition is met.
max=100
index=0
until [[ $index -eq $max ]] ; do
echo Index is $index
let index+=1
done
For command
Select this link to view information about the for-do-done command.
do list
done
The words are expanded, and then list is run repeatedly with variable set to each word in turn. You can
replace do and done with braces ({ }).
Examples
1. A for command to process a list of objects.
Functions
Select this link to view information about functions.
A function definition is a statement that when run installs a function named name and returns an exit
status of zero. The command is normally a list enclosed between braces ({ }).
When name is specified as a simple command, qsh runs command. The arguments to the simple command
temporarily become the positional parameters while the function is running. The special parameter 0 is
unchanged. By using local, you can declare local variables inside of the function. By using return, you
can end the function and resume execution with the next command after the function call.
Examples
Here is an example of a function that provides a qsh interface to the PING CL command.
ping()
{
# Initialize variables and make them local to this function
local nbrpkt=’’ waittime=’’ intnetadr=’’ msgmode=’’ pktlen=’’ ipttl=’’ host=’’
local c
Using Qshell
Select this link to find out how to use the QSH CL command, how to configure the Qshell environment,
and how to develop utilities.
Qshell 27
If running in an interactive job with no parameters, STRQSH starts an interactive Qshell session. If a
Qshell session is not already active in the job, then the following events occur:
1. A new Qshell session is started and a terminal window is displayed.
2. qsh runs the commands from the file /etc/profile if it exists.
3. qsh runs the commands from the file .profile in the user's home directory if it exists.
4. qsh runs the commands from the file specified by the expansion of the ENV variable if it exists.
If a Qshell session is already active in an interactive job, you are reconnected to the existing session.
From the terminal window, you can enter Qshell commands and view output from the commands. The
terminal window has two parts:
v an input line for entering commands
v an output area that contains an echo of the commands you entered and any output generated by the
commands
The Start QSH (STRQSH) command, also known as QSH, is a CL (control language) command that either
starts a Qshell interactive session or runs a Qshell command.
If called with the CMD parameter, STRQSH runs the specified Qshell command. The possible values of
the CMD parameter are as follows:
*NONE
No command is provided and an interactive session is started. If CMD(*NONE) is specified and
STRQSH is run in a batch job, STRQSH does nothing.
command
A Qshell command to run. The command can be a maximum of 5000 bytes in length. If a blank
or other special characters are used, the command must be enclosed in apostrophes. If an
apostrophe is intended, two apostrophes must be used.
When running a command, STRQSH starts qsh, runs the specified Qshell command, displays any output
generated by the command to the C runtime terminal session, and ends qsh. Note that qsh does not run
any profile files when started to run a command.
You can control what happens to the output by setting the QIBM_QSH_CMD_OUTPUT environment
variable. The environment variable can have these values:
STDOUT
Display the output to the C runtime terminal session. This is the default value.
NONE
Throw away any output that is produced.
FILE=pathname
Store the output in the file specified by pathname. The file is truncated before output is written to
the file.
FILEAPPEND=pathname
Store the output in the file specified by pathname. The output is appended to end of the file.
Qshell 29
By default, the messages are sent as completion messages. You can have the messages sent as escape
messages by setting the environment variable QIBM_QSH_CMD_ESCAPE_MSG. When the value of the
environment variable is "Y", the QSH0006, and QSH0007 messages are always sent as escape messages
and the QSH0005 message is sent as an escape message if the exit status is greater than zero.
Related tasks:
“Using a Qshell interactive session” on page 27
The Start QSH (STRQSH) command, also known as QSH, is a CL (control language) command that either
starts a Qshell interactive session or runs a Qshell command.
i5/OS PASE provides a qsh command that invokes qsh to either run an interactive session or a
command. You can use it to run any Qshell command from any i5/OS PASE shell.
Related information:
i5/OS PASE
See the Variables topic for the complete list of supported environment variables.
If the file /etc/profile exists, qsh runs it in the current environment when you login. It is typically
maintained by an administrator to set system-wide defaults for all users. This file should be secured by
setting the public authority to read and execute.
Here is a sample /etc/profile file that defines a system-wide PATH variable for all users:
# Sample /etc/profile file
export PATH=/usr/bin:.:/QOpenSys/usr/bin
Profile file
If the file .profile exists in the user's home directory, qsh runs it in the current environment when you
login. It is used to customize your login environment.
Here is a sample .profile file that defines the user's environment file and customizes the PATH variable to
include a subdirectory under the user's home directory:
# Sample .profile file
export ENV=$HOME/.qshrc
export PATH=$PATH:$HOME/bin
Environment file
If the file specified by the expansion of the ENV variable exists, qsh runs it in the current environment
when starting an interactive shell. The environment file is typically used to set aliases, define functions,
or set options for an interactive shell session.
For everything to run correctly, you must configure your environment as documented in the tables below.
A locale contains information about a language and country or region, including how to sort and classify
characters and the formats for dates, times, numbers, and monetary values. A locale is set by setting the
LANG environment variable to the path name to a locale object. For example, to set the locale for US
English, the LANG environment variable is set as follows:
LANG=/QSYS.LIB/EN_US.LOCALE
It is best to set the LANG environment variable before starting qsh. Some utilities will not work correctly
if the locale is not valid for the CCSID and language ID of the job as shown in the tables below.
Supported CCSIDs
The following table shows the supported CCSIDs. It is indexed by CCSID number. If a CCSID is not in
the table, qsh sends message 001-0072 and runs as if it was started in CCSID 37.
Supported CCSIDs
CCSID Code Page Description
00037 00037 USA, Canada
00256 00256 International #1
00273 00273 Germany, Austria
00277 00277 Denmark, Norway
00278 00278 Finland, Sweden
00280 00280 Italy
00284 00284 Spain, Latin America
00285 00285 United Kingdom
00297 00297 France
00424 00424 Israel (Hebrew)
00425 00425 Arabic
00500 00500 Belgium, Canada, Switzerland
00833 00833 Korea Extended Single-byte
00836 00836 Simplified Chinese Extended
Single-byte
00838 00838 Thailand Extended
Qshell 31
Supported CCSIDs
CCSID Code Page Description
00870 00870 Latin-2 Multilingual
00871 00871 Iceland
00875 00875 Greece
00880 00880 Cyrillic Multilingual
00905 00905 Turkey Extended
00918 00918 Pakistan
00933 00833, 00834 Korea Extended Mixed
00935 00836, 00837 Simplified Chinese Extended Mixed
00937 00037, 00835 Traditional Chinese Extended Mixed
00939 01027, 00300 Japan English Extended Mixed
01025 01025 Cyrillic Multilingual
01026 01026 Turkey
01027 01027 Japan Latin Extended Single-byte
01097 01097 Farsi
01112 01112 Baltic Multilingual
01122 01122 Estonian
01123 01123 Cyrllic Ukraine
01130 01130 Vietnam
01132 01132 Lao
01137 01137 Devanagari
01140 01140 USA, Canada euro
01141 01141 Germany, Austria euro
01142 01142 Denmark, Norway euro
01143 01143 Finland, Sweden euro
01144 01144 Italy euro
01145 01145 Spain, Latin America euro
01146 01146 United Kingdom euro
01147 01147 France euro
01148 01148 Belgium, Canada, Switzerland euro
01149 01149 Iceland euro
01153 01153 Latin-2 Multilingual euro
01154 01154 Cyrllic Multilingual euro
01155 01155 Turkey euro
01156 01156 Baltic Multilingual euro
01157 01157 Estonia euro
01158 01158 Cyrillic Ukraine euro
01160 01160 Thailand Extended euro
01164 01164 Vietnam euro
01388 00836, 00837 Simplified Chinese Host Data Mixed
01399 01399, 00300 Japan English Extended Mixed euro
Supported Languages
The following table shows the supported languages. It is indexed by language. In the Language field, the
value in parentheses is the value to use for the LANGID parameter of the CHGJOB CL command. In the
Country or Region field, the value in parentheses is the value to use for the CNTRYID parameter of the
CHGJOB CL command.
Note that there are more valid combinations of Language, Country or Region, CCSID, and Locale than
are listed in the table. For example, there is only one entry for the Spanish language even though it is
used in more than one country or region.
When running Qshell, the LANGID, CNTRYID, CCSID job attributes must be set to the values listed in
the table, and the LANG environment variable must be set to the listed locale.
Supported Languages
Language Country or Region Id CCSID Locale
Albanian (SQI) Albania (AL) 00500 /QSYS.LIB/
SQ_AL.LOCALE
Arabic (ARA) Arabic Area (AA) 00425 /QSYS.LIB/
AR_AA.LOCALE
Belgian Dutch (NLB) Belgium (BE) 00500 /QSYS.LIB/
NL_BE.LOCALE
Belgian Dutch Euro (NLB) Belgium (BE) 01148 /QSYS.LIB/
NL_BE_E.LOCALE
Belgian French (FRB) Belgium (BE) 00500 /QSYS.LIB/
FR_BE.LOCALE
Belgian French Euro (FRB) Belgium (BE) 01148 /QSYS.LIB/
FR_BE_E.LOCALE
Belgium English (ENB) Belgium (BE) 00500 /QSYS.LIB/
EN_BE.LOCALE
Brazilian Portugese (PTB) Brazil (BR) 00037 /QSYS.LIB/
PT_BR.LOCALE
Bulgarian (BGR) Bulgaria (BG) 00037 /QSYS.LIB/
BG_BG.LOCALE
Canadian French (FRC) Canada (CA) 00500 /QSYS.LIB/
FR_CA.LOCALE
Croatian (HRV) Croatia (HR) 00870 /QSYS.LIB/
HR_HR.LOCALE
Qshell 33
Supported Languages
Language Country or Region Id CCSID Locale
Czech (CSY) Czech Republic (CZ) 00870 /QSYS.LIB/
CS_CZ.LOCALE
Danish (DAN) Denmark (DK) 00277 /QSYS.LIB/
DA_DK.LOCALE
Dutch (NLD) Netherlands (NL) 00037 /QSYS.LIB/
NL_NL.LOCALE
Dutch Euro (NLD) Netherlands (NL) 01140 /QSYS.LIB/
NL_NL_E.LOCALE
English Upper Case (ENP) United States (US) 00037 /QSYS.LIB/
EN_UPPER.LOCALE
Estonian (EST) Estonia (EE) 01122 /QSYS.LIB/
ET_EE.LOCALE
Finnish (FIN) Finland (FI) 00278 /QSYS.LIB/FI_FI.LOCALE
Finnish Euro (FIN) Finland (FI) 01143 /QSYS.LIB/
FI_FI_E.LOCALE
French (FRA) France (FR) 00297 /QSYS.LIB/
FR_FR.LOCALE
French Euro (FRA) France (FR) 01147 /QSYS.LIB/
FR_FR_E.LOCALE
German (DEU) Germany (DE) 00273 /QSYS.LIB/
DE_DE.LOCALE
German Euro (DEU) Germany (DE) 01141 /QSYS.LIB/
DE_DE_E.LOCALE
Greek (ELL) Greece (GR) 00875 /QSYS.LIB/
EL_GR.LOCALE
Hebrew (HEB) Israel (IL) 00424 /QSYS.LIB/IW_IL.LOCALE
Hungarian (HUN) Hungary (HU) 00870 /QSYS.LIB/
HU_HU.LOCALE
Icelandic (ISL) Iceland (IS) 00871 /QSYS.LIB/IS_IS.LOCALE
Italian (ITA) Italy (IT) 00280 /QSYS.LIB/IT_IT.LOCALE
Italian Euro (ITA) Italy (IT) 01144 /QSYS.LIB/
IT_IT_E.LOCALE
Japanese Katakana (JPN) Japan (JP) 05035 /QSYS.LIB/
JA_5035.LOCALE
Japanese Full (JPN) Japan (JP) 13488 /QSYS.LIB/
JA_13488.LOCALE
Korean (KOR) South Korea (KR) 00933 /QSYS.LIB/
KO_KR.LOCALE
Latvian (LVA) Latvia (LV) 01112 /QSYS.LIB/
LV_LV.LOCALE
Lithuanian (LTU) Lithuania (LT) 01112 /QSYS.LIB/LT_LT.LOCALE
Macedonian (MKD) Macedonia (MK) 01025 /QSYS.LIB/
MK_MK.LOCALE
Norwegian (NOR) Norway (NO) 00277 /QSYS.LIB/
NO_NO.LOCALE
Related information:
iSeries Globalization IBM Code Pages
Performance considerations
Configure Qshell for the best possible performance on your system.
The following tips can help improve performance when using qsh:
v Do not use command substitutions in the value of the PS1 variable. This causes a new process to be
started every time you press the <enter> key.
Qshell 35
v Use input redirection instead of cat. For example, the following command:
cat myfile | grep Hello
can be replaced with this command:
grep Hello < myfile
v Use built-in utilities whenever possible because they are run in the current process.
v Leave the SHELL variable unset. If a script file does not contain a "#!" on the first line, the script is run
in the current activation of qsh.
When creating ILE/C or ILE/C++ programs, you should use Integrated File System I/O when creating
all of the modules in your utility program.
A utility reads input from standard input or descriptor 0, writes output to standard output or descriptor
1, and writes errors to standard error or descriptor 2.
If your utility program uses the ILE/C or ILE/C++ standard files for I/O, you can run your utility from
either the qsh command line or the QCMD command line. If your utility reads and writes directly from
descriptors 0, 1, and 2, you can only run your utility from the Qshell command line.
You can edit files from any file system using the EDTF CL command. It is an editor that is similar to the
Source Entry Utility (SEU) for editing stream files or database files. Also, you can display a stream file or
database file using the DSPF CL command.
Another alternative is to connect to the server using System i® Navigator and edit the file using an editor
running on the client. The file can be stored in ASCII and still be used by Qshell.
A shell script is just a text file that contains shell commands. It is important to use the right file system
for storing shell scripts. Shell scripts are stream data and should be stored in the "root" file system. While
it is possible to store shell scripts in source physical files in the QSYS.LIB file system, it causes the shell
scripts to use more storage and to run slower.
Utilities
Use this alphabetical list of all the utilities to go directly to the utility that you need.
ABCDEFGHIJKLMNOPQRSTUWXZ
A
ajar Alternative Java archive tool
alias Define or display aliases
appletviewer Run applets without a web browser
attr Get or set attributes for files
B
basename Return non-directory portion of path name
break Exit from for, while, or until loop
builtin Run a shell built-in utility
C
cat Concatenate and print files
catsplf Concatenate and print spool files
cd Change working directory
chgrp Change file group permission
chmod Change file modes (permissions)
chown Change file ownership
clrtmp Clear the /tmp directory
cmp Compare two files
colon (:) Null utility
command Run a simple command
compress Compress data
continue Continue for, while, or until loop
Qshell 37
cp Copy files
cut Cut out selected fields of each line of a file
D
dataq Send or receive messages from i5/OS data queue
datarea Read or write i5/OS data area
date Write the date and time
db2profc DB2® SQLJ profile customizer
db2profp Print DB2 customized version of SQLJ profile
declare Declare variables and set attributes
dirname Return directory portion of path name
dot (.) Run commands in current environment
dspmsg Display message from a message catalog
E
echo Write arguments to standard output
egrep Search a file for an extended regular expression pattern
env Set environment for command invocation
eval Construct command by concatenating arguments
exec Run commands and open, close, or copy descriptors
exit Exit from the shell
export Set export attribute for variables
expr Evaluate arguments as an expression
extcheck Detect Java archive conflicts
F
false Return false value
fgrep Search a file for a fixed string pattern
file Determine file type
find Find files
G
gencat Generate a formatted message catalog
getconf Get configuration values
getjobid Display job information
getopts Parse utility options
grep Search a file for a pattern
H
hash Remember or report utility locations
head Copy the first part of files
help Display information for built-in utility
I
iconv Convert characters from one CCSID to another CCSID
id Return user identity
ipcrm Remove interprocess communication identifier
ipcs Report interprocess communication status
J
jar Archive Java files
jarsigner Java archive signing and verification
java Run Java interpreter
javac Compile a Java program
javadoc Generate Java documentation
javah Generate C header or stub file
javakey Manage Java security keys and certificates
javap Disassemble a compiled Java program
jobs Display status of jobs in the current session
K
kdestroy Destroy a Kerberos credentials cache
keytab Manage a Kerberos key table file
keytool Key and certificate management tool
kill End or signal processes
kinit Obtain or renew a Kerberos ticket-granting ticket
klist Display the contents of a Kerberos credentials cache or
key table file
ksetup Manage Kerberos service entries in the LDAP directory
for a Kerberos realm
L
ldapadd Add LDAP entry tool
ldapchangepwd Change LDAP Password tool
ldapdelete Delete LDAP entry tool
ldapdiff Compare LDAP replication synchronization tool
ldapexop Extend LDAP operation tool
ldapmodify Change LDAP entry tool
ldapmodrdn Change LDAP Relative Distinguished Name (RDN) tool
ldapsearch Search LDAP server tool
let Evaluate arithmetic expression
liblist Manage library list
ln Link files
Qshell 39
local Assign a local variable in a function
locale Get locale specific information
logger Log messages
logname Return user's login name
ls List directory contents
M
mkdir Make directories
mkfifo Make FIFO special files
mv Move files
N
native2ascii Convert native characters to ASCII
nohup Run utility without hangups
O
od Dump files in various formats
P
pax Portable archive interchange
policytool Policy file creation and management tool
pr Print files
print Write output
printenv Display values of environment variables
printf Write formatted output
profconv Convert SQLJ serialized profile instance to Java class
profdb SQLJ profile auditor installer
profp Print SQLJ profile
ps Display process status
pwd Return working directory name
pwdx Return working directory expanded
Q
qsh Qshell command language interpreter
R
read Read a line from standard input
readonly Set read-only attribute for variables
return Return from a function
rexec Run remote command
rexx Run REXX procedure
Rfile Read or write record files
S
sed Stream editor
serialver Return serial version
set Set or unset options and positional parameters
setccsid Set CCSID attribute for a file
sh Qshell command language interpreter
shift Shift positional parameters
sleep Suspend invocation for an interval
sort Sort, merge, or sequence check text files
source Run commands in the current environment
split Split files into pieces
sqlj Structured query language for Java (SQLJ) translator
system Run CL command
sysval Retrieve system values or network attribute
T
tail Copy the last part of a file
tar File archiver
tee Duplicate standard input
test Evaluate expression
tnameserv Naming service
touch Change file access and modification times
tr Translate characters
trap Trap signals
true Return true value
type Find type of command
typeset Declare variables and set attributes
U
ulimit Set or display resouce limits
umask Get or set the file mode creation mask
unalias Remove alias definitions
uname Return system name
uncompress Expand compressed data
uniq Report or filter out repeated lines in a file
unset Unset values and attributes of variables and functions
Qshell 41
W
wait Wait for process completion
wc Word, line and byte/character count
whence Determine how command is interpreted
X
xargs Construct argument lists and invoke utility
Z
zcat Expand and concatenate data
Synopsis
Description
When no arguments are specified, qsh displays a list of all the aliases and their values.
Options
-p Precede each line of the output with the word "alias " so it is displayed in a re-enterable format.
Operands
Each name specifies an alias in the current environment. If a value is also specified, then the value of the
alias is updated.
Exit status
v 0 when successful.
v >0 when unsuccessful. The value is the number of names that are not aliases.
Examples
1. Define an alias to list the contents of a directory:
alias ll=’ls -l’
2. Display the value of the ll alias:
Synopsis
unalias -a
Description
Options
-a Remove all aliases
Operands
Exit status
v 0 when successful.
v >0 when unsuccessful. The value is the number of names that are not aliases.
Examples
Description
The builtin utility runs the shell built-in utility with the specified arguments. You can use builtin to run a
built-in utility from a shell function of the same name.
Operands
Qshell 43
The utility is the name of a shell built-in utility. You can use command, type, or whence to determine the
type of a utility
Exit status
v The exit status of the utility
v 1 if utility is not a built-in utility
Related concepts:
“Compound commands” on page 23
Compound commands provide control flow for other commands. Each compound command starts with a
reserved word and has a corresponding reserved word at the end.
Related tasks:
“command - Run a simple command”
“type - Find type of command” on page 54
“whence - Determine how command is interpreted” on page 55
“help - Display information for built-in utility” on page 48
Description
You can use command to run command_name with the specified arguments with functions eliminated from
the search order. If command_name is a special built-in utility, then it is treated as a regular built-in utility.
Otherwise, the effect of command is the same as omitting command.
Note that command -v is equivalent to whence and command -V is equivalent to whence -v.
Options
-p Perform the command search using a default value for the PATH variable that is guaranteed to
find all of the standard utilities.
-v Write a string that shows the path name or command used by qsh to invoke command_name in
the current environment.
-V Write a string that shows how command_name is interpreted by qsh in the current environment.
Operands
Exit status
v 0 when successful.
v >0 when unsuccessful.
Examples
1. Run the export special built-in utility as a regular built-in utility: command export ALPHA
2. Display the path name used to invoke the ls utility: command -v ls
3. Display how the reserved word for is interpreted: command -V for
Related concepts:
Description
You can use dot to run a script or function in the current environment.
Options
None.
Operands
If name refers to a function, qsh runs the function in the current environment. Otherwise, qsh uses the
search path specified by the PATH variable to find name. If name is found, qsh reads the contents of the
file and runs those commands in the current environment.
If specified, the arguments replace the positional parameters while name is running. Otherwise the
positional parameters are unchanged.
Exit status
Description
Qshell 45
The env utility obtains the current environment, modifies it according to the arguments, and then invokes
the specified utility. Any arguments are passed to the utility. If no utility is specified, the resulting
environment is written to standard output with one name=value per line.
Options
- Invoke the utility with exactly the environment specified on the command. The inherited
environment is ignored completely.
-i Same as '-'.
Operands
name=value
This modifies the run-time environment and is placed into the inherited environment before the
utility is invoked.
utility The name of the command or utility to be invoked.
argument
A string to pass to the invoked command or utility.
Exit status
v 0 when successful
v >0 when an error occurs
Related tasks:
“nohup - Run utility without hangups” on page 48
“printenv - Display values of environment variables” on page 150
Description
You can use eval to construct a command by concatenating arguments together, each separated by a
<space>. qsh then reads and runs the constructed command.
Options
None.
Operands
Each argument is expanded twice, once to construct the command and once when the constructed
command is run.
Exit status
Description
The exec utility replaces qsh with command without creating a new process. The specified arguments are
arguments to command. Any redirections affect the current environment.
When a command is not specified, any redirections are processed in the current environment. Any file
descriptors greater than 2 that are opened by a redirection are not inherited when qsh invokes another
program.
Options
-c Run command with an empty set of environment variables.
Operands
Exit status
Examples
1. Open a file for reading on descriptor 5:
exec 5<$HOME/input
2. Close descriptor 5:
exec 5<&-
Related concepts:
“rexec - Run remote command” on page 50
Related tasks:
“command - Run a simple command” on page 44
“dot (.) - Run commands in current environment” on page 45
“eval - Construct command by concatenating arguments” on page 46
“nohup - Run utility without hangups” on page 48
“print - Write output” on page 127
“read - Read a line from standard input” on page 129
“source - Run commands in current environment” on page 53
exit [ n ]
Description
Qshell 47
You can use exit to end the shell and return to the program that called qsh.
Options
None.
Operands
The value of n is an integer that is greater than or equal to 0 and less than or equal to 255.
Exit status
Description
The help utility displays a usage message for the specified built-in utility. If no arguments are specified,
help displays the list of all built-in utilities.
Operands
Exit Status
v 0 when successful
v >0 if utility is not a built-in utility
Related tasks:
“builtin - Run a shell built-in utility” on page 43
“command - Run a simple command” on page 44
“type - Find type of command” on page 54
“whence - Determine how command is interpreted” on page 55
Description
The nohup utility runs the specified utility with the specified arguments. When utility is invoked the
SIGHUP signal is set to be ignored. You can use nohup to allow utility to run even after ending the
Qshell session.
If standard output is a terminal, all output written by utility to its standard output is appended to the file
nohup.out in the current directory. If the file cannot be created or opened for appending, all output is
If standard error is a terminal, all output written by utility to its standard error is redirected to the same
descriptor as standard output.
Options
-C ccsid
The nohup.out file is created with the specified ccsid and all data written to the file is converted
from the CCSID of the job to the specified ccsid. This option overrides the value of the
QIBM_CCSID environment variable.
Operands
Environment Variables
Exit status
v 126 when utility was found but could not be run
v 127 when utility was not found or there was an error in nohup
v Otherwise, the exit status of utility
Related concepts:
“exec - Run commands and open, close, or copy descriptors” on page 47
Related tasks:
“command - Run a simple command” on page 44
“env - Set environment for command invocation” on page 45
Description
The qsh utility is the Qshell command language interpreter. In the first synopsis form, qsh reads the
specified command_file and runs the commands contained in the file. In the second synopsis form, qsh
runs the specified command_string and ends. In the third synopsis form, qsh reads commands from
standard input.
Options
The a, b, C, e, f, F, j, l, m, n, -o option t, u, v, and x options are described in set - Set or unset options and
positional parameters.
Qshell 49
-c Run the command specified in command_string and exit.
-i The shell is interactive. If there are no operands and standard input is connected to a terminal,
the -i option is set by default.
-s Read commands from standard input. If there are no operands and the -c option is not specified,
the -s option is set by default.
Operands
The command_file is the pathname of a regular file that contains Qshell commands. If the pathname does
not contain a slash (/) character, qsh searches for command_file using the PATH variable. The special
parameter 0 is set to the value of command_file. Each arg is a positional parameter.
Exit status
v 0 when successful.
v 1 when unsuccessful.
v 2 when an error occurred in a script.
v 3 when there was an unexpected exception in a root shell.
v 4 when there was an unexpected exception in an exception handler for a root shell.
v 5 when there was an unexpected exception in a child shell.
v 6 when there was an unexpected exception in an exception handler for a child shell.
v 7 when descriptor 0 was not available.
v 8 when descriptor 1 was not available.
v 9 when descriptor 2 was not available.
v 10 when there was an error opening the message catalog.
v 11-125 when unsuccessful.
v 126 when a command was found but could not be invoked.
v 127 when a command cannot be found.
v >128 when a command was ended by a signal. The value is 128 plus the signal number.
Related concepts:
“Command language” on page 7
This detailed reference information is a good starting point if you are writing shell scripts or are an
experienced user of shells.
Related tasks:
“exit - Exit from the shell” on page 47
“set - Set or unset options and positional parameters” on page 151
rexec [-C ccsid ] [-p password] [-u user] [-i] host command
Description
The rexec utility runs the specified command on the remote system specified by host. The remote system
must be running a rexec server to process the commands. By default, rexec prompts for a valid user
name and password for the remote system. The user name and password are not encyrpted when they
are sent to the remote system.
By default, the data sent to and from the remote system is encoded in CCSID 819. The CCSID used to
encode the data can be specified with either the -C option or the QIBM_CCSID variable. If the CCSID
value is 65535, then no conversion is done on the data.
Options
-C ccsid
Encode the data sent to and from the remote system in the specified ccsid. This option overrides
the value of the QIBM_CCSID environment variable.
-i Ignore standard input on the local system.
-p password
The password for the user on host.
-u user A valid user name on host.
Operands
The host is the name of the remote system where the command is run. The command is a command string
that is interpreted by the rexec server running on the remote system.
Environment Variables
Exit status
v 0 when successful
v >0 when unsuccessful
Related concepts:
“exec - Run commands and open, close, or copy descriptors” on page 47
Description
The rexx utility runs the REXX procedure specified by path with the specified arguments.
The REXX interpreter cannot read REXX commands from standard input. It can only run REXX
procedures stored in members of database files in the QSYS.LIB file system. The interactive debug feature
of the REXX interpreter is not supported by the rexx utility.
Qshell 51
v When the the shell command ends normally with an exit status of zero, the REXX return code is set to
zero and no condition is raised.
v If the shell command ends normally with an exit status that is non-zero, the REXX return code is set to
the exit status value and the ERROR condition is raised.
v If the shell command ends by signal, the REXX return code is set to the signal number + 128 and the
FAILURE condition is raised.
v If the shell command ends by exception, the REXX return code is set to the exception number from
wait() and the FAILURE condition is raised.
Options
-c cmdenv
Set the command environment program to process commands for the REXX procedure. If the
option is not specified, the default value is command. The cmdenv can be one of the following
values:
v command for the i5/OS CL command environment.
v cpicomm for the Common Programming Interface for communications command environment.
v execsql for the Structured Query Language (SQL) command environment.
v qsh for the Qshell command environment.
v path to specify the path to the command environment program. The path must specify a
program in the QSYS.LIB file system.
-t type Control tracing for the REXX procedure. If the option is not specified, the default value is normal.
The type can be one of the following values:
v all to trace all clauses before processing.
v commands to trace host commands before processing and display any error return codes.
v error to trace host commands after processing that result in an error return code.
v failure to trace host commands after processing that result in a failure along with the return
code.
v intermediates to trace all clauses before processing along with intermediate results during the
evaluation of expressions.
v labels to trace labels during processing.
v normal to trace host commands after processing that result in a failure.
v off to turn off all tracing.
v results to trace all clauses before processing.
Operands
The path is the path name of the REXX procedure. On i5/OS, a REXX procedure can only be stored in the
QSYS.LIB file system.
Exit status
v 0 when successful
v 1 when there is an error running the REXX procedure
v >1 when unsuccessful
Related tasks:
“system - Run CL command” on page 53
Related information:
REXX information
Description
You can use source to run a script or function in the current environment. It is a synonym for the dot
utility.
Related concepts:
“exec - Run commands and open, close, or copy descriptors” on page 47
Related tasks:
“command - Run a simple command” on page 44
“eval - Construct command by concatenating arguments” on page 46
Description
The system utility runs a CL command. Any spool file output generated by CLcommand is written to
standard output. By default, the spool files are deleted after they are written and the job log of the job
running system is deleted.
Any messages generated by CLcommand are written to standard error. By default, all messages generated
by CLcommand are written using the following format:
MsgId: Text
where "MsgId" is the seven character i5/OS message identifier (for example CPF0001) and "Text" is the
text of the message. Use the -n option to not include the "MsgId" prefix.
By default, system checks the number of threads running in the job. If there is more than one thread
running, it starts a second job and runs CLcommand in the second job. Use the -i option to force system to
always run CLcommand in the current job.
Options
-i Always run CLcommand in the current job and set the exit status to the ILE return code of the
program called by CLcommand. Note that some CL commands do not run in a multi-thread
capable job or when there are multiple threads running in the job.
-K Keep all spool files generated by CLcommand and the job log of the job running system. If this
option is not specified, all spool files are deleted after they are written and the job log is deleted.
-k Keep all spool files generated by CLcommand. If this option is not specified, all spool files are
deleted after they are written.
-n Do not include the message identifier when writing the messages to standard error. Only the
message text of the messages are written to standard error. This option is ignored if the -q option
is also specified.
-p Only write the messages sent to the program's message queue by CLcommand to standard error.
This option is ignored if the -q option is also specified.
-q Do not write messages generated by CLcommand to standard error.
Qshell 53
-s Do not write spool files generated by CLcommand to standard output.
-v Write the complete command string to standard output before running it.
Note that for compatibility with the PASE system utility, system does not return an error if the -b, -e, -E,
-I, or -O options are specified, but the options are ignored.
Operands
Each arg is a parameter to CLcommand. You may need to enclose CLcommand and args in quotes to prevent
qsh from expanding any special characters in them. Both CL and qsh use some of the same special
characters, for example, the asterisk (*) character.
Environment Variables
Exit status
v 0 when CLcommand is successful
v >0 when CLcommand is unsuccessful or when set by the program called by CLcommand
Examples
1. List all of the active jobs:
system wrkactjob
2. Create a test library:
system "CRTLIB LIB(TESTDATA) TYPE(*TEST)"
3. Delete a library and do not write any messages:
system -q "DLTLIB LIB(TESTDATA)"
Related tasks:
“rexx - Run REXX procedure” on page 51
Related information:
CL command finder
Running i5/OS commands from i5/OS PASE
The type utility displays the type of each specified name. The name can be an alias, function, special shell
built-in, shell built-in, reserved word, or file.
Options
-a Show all uses for name.
-p Do not check to see if name is a reserved word, a built-in utility, an alias, or a function.
-t Display a one word description for the type of name.
Operands
Exit status
v 0 when every name is found
v >0 when unsuccessful
Related tasks:
“builtin - Run a shell built-in utility” on page 43
“command - Run a simple command” on page 44
“help - Display information for built-in utility” on page 48
“whence - Determine how command is interpreted”
Description
The whence utility displays how each specified name is interpreted. The name can be an alias, function,
special shell built-in, shell built-in, reserved word, or file.
Note that whence is equivalent to command -v and whence -v is equivalent to command -V.
Options
-a Show all uses for name.
-f Do not check to see if name is a function.
-p Do not check to see if name is a reserved word, a built-in utility, an alias, or a function.
-v Display the type of name.
Operands
Exit status
v 0 when every name is found
v >0 when unsuccessful
Examples
Qshell 55
Find the type of the reserved word for:
whence -v for
Related tasks:
“builtin - Run a shell built-in utility” on page 43
“command - Run a simple command” on page 44
“dot (.) - Run commands in current environment” on page 45
“help - Display information for built-in utility” on page 48
“type - Find type of command” on page 54
“eval - Construct command by concatenating arguments” on page 46
xargs [-t] [-e[eofstring]] [-E eofstring] [-l[number ]] [-L number] [-n number [-x]] [-s size] [utility [arguments ...]]
Description
The xargs utility reads space, tab, newline and end-of-file delimited arguments from the standard input
and runs the specified utility with them as arguments.
The utility and any arguments specified on the command line are given to the utility upon each invocation,
followed by some number of the arguments read from standard input. The utility is repeatedly run until
standard input is exhausted.
Spaces, tabs and newlines may be embedded in arguments using single (') or double (") quotation marks
or backslashes (\). Single quotation marks escape all non-single quotation mark characters, excluding
newlines, up to the matching single quotation marks. Double quotation marks escape all non-double
quotation mark characters, excluding newlines, up to the matching double quotation marks. Any single
character, including newlines, may be escaped by a backslash.
Undefined behavior may occur if utility reads from the standard input.
The xargs utility exits immediately (without processing any further input) if a command line cannot be
assembled, utility cannot be invoked, an invocation of the utility is ended by a signal, or an invocation of
the utility exits with a value of 255.
Options
-E eofstring
Specify a logical end-of-file string. xargs reads standard input until either end-of-file or the logical
end-of-file string is encountered.
-e[eofstring]
This option is equivalent to the -E option. If eofstring is not specified, the default value is _ (a
single underscore).
-L number
Run utility for each non-empty number lines of arguments read from standard input. The last
invocation of utility will be with fewer lines of arguments if fewer than number remain. A line is
considered to end with the first newline character unless the last character of the line is a blank
character. A trailing blank character signals continuation to the next non-empty line, inclusive.
The -L and -n options are mutually exclusive. The last one specified takes effect.
Exit status
v 0 when all invocations of utility returned exit status 0.
v 1-125 when at least one invocation of utility returned a non-zero exit status or there was an error.
v 126 when utility was found but could not be invoked.
v 127 when utility cannot be found.
v >128 when utility was ended by a signal. The value is 128 plus the signal number.
Related tasks:
“echo - Write arguments to standard output” on page 126
“eval - Construct command by concatenating arguments” on page 46
“find - Find files” on page 92
Description
You can use cmp to compare two files. By default, a byte for byte binary comparison is done. If no
differences are found, no output is written. If no option flags are specified, cmp writes a message with
the byte and line number of the first difference and exits with an error. Bytes and lines are numbered
beginning with 1.
Options
-l (Lower case ell) Write the byte number in decimal and the differing bytes in octal for all
differences.
-s Silent mode where no output is written for differing files; only the exit status is set.
-t Text mode where the files are opened in text mode and translated to the CCSID of the job before
comparing byte for byte.
Qshell 57
Operands
The file1 and file2 operands are the two files to be compared byte for byte. The optional skip1 and skip2
are the number of bytes to skip from the beginning of each file, respectively, before the comparison
begins.
Environment variables
Exit status
v 0 when the files are identical
v 1 when the files are different
v >1 when an error occurred
Examples
Find the exact position where two files differ. It is better to place the reference or good file first and then
the changed or new file second.
cmp myApplet.java.old myApplet.java.new
Related tasks:
“sed - Stream editor” on page 62
“sort - Sort, merge, or sequence check text files” on page 67
“split - Split files into pieces” on page 69
“uniq - Report or filter out repeated lines in a file” on page 72
Description
The cut utility selects portions of each line as specified by list from each file (or the standard input by
default), and writes them to the standard output. The items specified by list can be in terms of column
position or in terms of fields delimited by a special character. Column numbering starts from 1.
The list is a comma or whitespace separated set of increasing numbers and/or number ranges. Number
ranges consist of a number, a dash (-), and a second number and select the fields or columns from the
first number to the second, inclusive. Numbers or number ranges may be preceded by a dash, which
selects all fields or columns from 1 to the first number. Numbers or number ranges may be followed by a
dash, which selects all fields or columns from the last number to the end of the line. Numbers and
number ranges may be repeated, overlapping, and in any order. It is not an error to select fields or
columns not present in the input line.
Exit status
v 0 on success
v 1 if an error occurred.
Related tasks:
“grep - Search a file for a pattern”
“tr - Translate characters” on page 70
“wc - Word, line and byte/character count” on page 73
egrep [-c|-l|-q] [-ihnsvwxy] [-e pattern_list] [-f pattern_file] [pattern] [file ...]
Description
The egrep utility is equivalent to running the grep utility with the -E option.
Related tasks:
“fgrep - Search a file for a fixed string pattern”
“grep - Search a file for a pattern”
fgrep [-c|-l|-q] [-ihnsvwxy] [-e pattern_list] [-f pattern_file] [pattern] [file ...]
Description
The fgrep utility is equivalent to running the grep utility with the -F option.
Related tasks:
“egrep - Search a file for an extended regular expression pattern”
grep [-E|-F] [-c|-l|-q] [ -R [-H | -L | -P] ] [-ihnsvwxy] [-e pattern_list] [-f pattern_file] [pattern] [file ...]
Description
The grep utility searches the given input files selecting lines which match one or more patterns. The type
of patterns is controlled by the options specified. By default, a pattern matches an input line if any
Qshell 59
regular expression (RE) in the pattern matches the input line without its trailing newline. A null RE
matches every line. Each input line that matches at least one of the patterns is written to the standard
output.
If -E and -F options are both specified, the last one specified is used.
Options
-E Use Extended Regular Expressions (ERE).
-F Do not recognize regular expressions.
-H If the -R option is specified, symbolic links on the command line are followed. Symbolic links
encountered in the tree traversal are not followed.
-L If the -R option is specified, both symbolic links on the command line and symbolic links
encountered in the tree traversal are followed.
-P If the -R option is specified, no symbolic links are followed.
-R If file designates a directory, grep searches each file in the entire subtree connected at that point.
-c Only a count of selected lines is written to standard output.
-e pattern_list specifies one or more search patterns. Each pattern should be separated by a newline
character.
-f pattern_file specifies a file containing search patterns. Each pattern should be separated by a
newline character.
-h Do not print filename headers.
-i The case of letters is ignored in making comparisons. That is, upper and lower case are
considered identical.
-l Only the names of files containing selected lines are written to standard output. Pathnames are
listed once per file searched. If the standard input is searched, the pathname "-" is written.
-n Each output line is preceded by its relative line number in the file; each file starting at line 1. The
line number counter is reset for each file processed. This option is ignored if the -c, -l, or -s
options are specified.
-q Quiet mode where no messages are printed. Only the exit status is returned.
-s Suppress the error messages ordinarily written for nonexistent or unreadable files. Other
messages are not suppressed.
-v Selected lines are those not matching the specified patterns.
-w The expression is searched for as a whole word (as if surrounded by "[[:<:]]" and "[[:>:]]").
-x Match line if pattern is the only thing on the line. This option takes precedence over the -w
option. If both are specified, the -w option is ignored.
-y Ignore case (same as -i).
Operands
Each file specifies the path to a text file. If no file operandss are specified, the standard input is used.
Exit status
v 0 when one or more lines were selected.
v 1 when no lines were selected.
v >1 when an error occurred.
Escape special characters which have meaning to grep, that is, the set of {$,.,^,[,],|,?,+,*,(,)}.
Examples
1. Find all occurrences of the word patricia in a file.
grep patricia myfile
2. Find all occurrences of the pattern ".Pp" at the beginning of a line. The single quotation marks assure
the entire expression is evaluated by grep instead of by the shell. The carat (^) means from the
beginning of a line.
grep ’^.Pp’ myfile
3. Find either 19, 20 or 25 in the file calendar.
grep -E ’19|20|25’ calendar
4. Find the total number of lines that matches a character in the range of "a" to "z".
grep -c ’[a-z]’ reference/alphabet.text
5. Display all lines that have a dollar sign ($) character in them. You must escape the dollar sign
character so grep will not interpret the character. Also, display the line number as well as the line that
contains the match.
grep -n ’\$’ valid.file
Related concepts:
“cut - Cut out selected fields of each line of a file” on page 58
Related tasks:
“egrep - Search a file for an extended regular expression pattern” on page 59
“tr - Translate characters” on page 70
“wc - Word, line and byte/character count” on page 73
Description
The iconv utility converts the encoding of characters read from either standard input or the specified file
from one CCSID to another CCSID and then writes the results to standard output. The input data is
assumed to be in the CCSID specified by the fromCCSID parameter. If file is not specified, the iconv
utility reads from standard input.
Qshell 61
You must specify the CCSID values defined on i5/OS with a supported conversion for the fromCCSID
and toCCSID parameters.
Options
-f fromCCSID
The input data is encoded in the fromCCSID.
-t toCCSID
The output data is encoded in the toCCSID.
Operands
Exit status
v 0 when successful
v 1 when the conversion is not supported or there is an error with file
v 2 when there is an error during the conversion
Related tasks:
“locale - Get locale specific information” on page 173
“tr - Translate characters” on page 70
“setccsid - Set CCSID attribute for file” on page 119
“sed - Stream editor”
“sort - Sort, merge, or sequence check text files” on page 67
“split - Split files into pieces” on page 69
“uniq - Report or filter out repeated lines in a file” on page 72
sed [-an] [-C ccsid ] [-e command] [-f command_file] file ...
Description
The sed utility reads the specified files, or the standard input if no files are specified, modifying the input
as specified by a list of commands. The input is then written to the standard output.
A single command may be specified as the first argument to sed. Multiple commands may be specified by
using the -e or -f options. All commands are applied to the input in the order they are specified
regardless of their origin.
Options
-a By default, the files listed as parameters for the w functions are created (or truncated) before any
processing begins. The -a option causes sed to delay opening each file until a command
containing the related w function is applied to a line of input.
-C ccsid
Any files created by sed are created with the CCSID specified by ccsid. This option overrides the
value of the QIBM_CCSID environment variable.
-e command
Append the editing commands specified by the command argument to the list of commands.
Operands
address
and the
function
Normally, sed cyclically copies a line of input, not including its terminating newline character, into a
"pattern space", (unless there is something left after a D function), applies all of the commands with
addresses that select that pattern space, copies the pattern space to the standard output, appending a
newline, and deletes the pattern space.
Some of the functions use a "hold space" to save all or part of the pattern space for subsequent retrieval.
Extended description
sed Addresses
A command line with one address selects all of the pattern spaces that match the address.
A command line with two addresses selects the inclusive range from the first pattern space that matches
the first address through the next pattern space that matches the second. If the second address is a
number less than or equal to the line number first selected, only that line is selected. Starting at the first
line following the selected range, sed starts looking again for the first address.
Editing commands can be applied to non-selected pattern spaces by use of the exclamation character (!)
function.
sed regular expressions are basic regular expressions. In addition, sed has the following two additions to
basic regular expressions:
Qshell 63
v In a context address, any character other than a backslash (\) or newline character may be used to
delimit the regular expression. Also, putting a backslash character before the delimiting character
causes the character to be treated literally. For example, in the context address \xabc\xdefx, the regular
expression delimiter is an x and the second x stands for itself, so that the regular expression is abcxdef .
v The escape sequence \n matches a newline character embedded in the pattern space. You can't,
however, use a literal newline character in an address or in the substitute command.
One special feature of sed regular expressions is that they can default to the last regular expression used.
If a regular expression is empty, that is, just the delimiter characters are specified, the last regular
expression encountered is used instead. The last regular expression is defined as the last regular
expression used as part of an address or substitute command, and at run-time, not compile-time. For
example, the command:
/abc/s//XXX/
sed Functions
In the following list of commands, the maximum number of permissible addresses for each command is
indicated by [0addr], [1addr], or [2addr], representing zero, one, or two addresses.
The argument text consists of one or more lines. To embed a newline in the text, precede it with a
backslash. Other backslashes in text are deleted and the following character taken literally.
The r and w functions take an optional file parameter, which should be separated from the function letter
by white space. Each file given as an argument to sed is created (or its contents truncated) before any
input processing begins.
The b, r,s, t,w,y,! , and & functions all accept additional arguments. The following synopses indicate
which arguments have to be separated from the function letters by white space characters.
Two of the functions take a function-list. This is a list of sed functions separated by newlines, as follows:
{ function
function
...
function
}
The { can be preceded by white space and can be followed by white space. The function can be preceded
by white space. The terminating } must be preceded by a newline or optional white space.
[2addr] function-list
Execute function-list only when the pattern space is selected.
[1addr]a\ text
Write text to standard output immediately before each attempt to read a line of input, whether by
executing the N function or by beginning a new cycle.
[2addr]b[label]
Branch to the & function with the specified label. If the label is not specified, branch to the end of
the script.
[2addr]c\ text
Delete the pattern space. With 0 or 1 address or at the end of a 2-address range, text is written to
the standard output.
[2addr]d
Delete the pattern space and start the next cycle.
Qshell 65
regular_expression and the replacement. Within the regular_expression and the replacement, the regular
expression delimiter itself can be used as a literal character if it is preceded by a backslash.
An ampersand (&) appearing in the replacement is replaced by the string matching the regular
expression. The special meaning of & in this context can be suppressed by preceding it by a
backslash. The string \#, where # is a digit, is replaced by the text matched by the corresponding
backreference expression.
A line can be split by substituting a newline character into it. To specify a newline character in
the replacement string, precede it with a backslash.
The value of flags in the substitute function is zero or more of the following:
0 ... 9 Make the substitution only for the N'th occurrence of the regular expression in the
pattern space.
g Make the substitution for all non-overlapping matches of the regular expression, not just
the first one.
p Write the pattern space to standard output if a replacement was made. If the replacement
string is identical to that which it replaces, it is still considered to have been a
replacement.
w file Append the pattern space to file if a replacement was made. If the replacement string is
identical to that which it replaces, it is still considered to have been a replacement.
[2addr]t [label]
Branch to the : function bearing the label if any substitutions have been made since the most
recent reading of an input line or execution of a t function. If no label is specified, branch to the
end of the script.
[2addr]w file
Append the pattern space to the file.
[2addr]x
Swap the contents of the pattern and hold spaces.
[2addr]y/string1/string2/
Replace all occurrences of characters in string1 in the pattern space with the corresponding
characters from string2. Any character other than a backslash or newline can be used instead of a
slash to delimit the strings. Within string1 and string2, a backslash followed by any character
other than a newline is that literal character, and a /n is replaced by a newline character.
[2addr]!function
[2addr]!function-list
Apply the function or function-list only to the lines that are not selected by the address(es).
[0addr]:label
This function does nothing; it bears a label to which the b and t commands may branch.
[1addr]=
Write the line number to the standard output followed by a newline character.
[0addr] Empty lines are ignored.
[0addr]#
The # and the remainder of the line are ignored (treated as a comment), with the single exception
that if the first two characters in the file are #n, the default output is suppressed. This is the same
as specifying the -n option on the command line.
Environment vriables
Exit status
v 0 on success
v >0 if an error occurs
Related tasks:
“cmp - Compare two files” on page 57
“iconv - Convert characters from one CCSID to another CCSID” on page 61
“locale - Get locale specific information” on page 173
“tr - Translate characters” on page 70
“setccsid - Set CCSID attribute for file” on page 119
“sort - Sort, merge, or sequence check text files”
“split - Split files into pieces” on page 69
“uniq - Report or filter out repeated lines in a file” on page 72
sort [-cmubdfinr] [-t char] [-T char] [-k keydef ...] [-o output] [file] ...
Description
The sort utility sorts text files by lines. Comparisons are based on one or more sort keys extracted from
each line of input, and are performed lexicographically. By default, if keys are not given, sort regards
each input line as a single field.
Options
-c Check that the single input file is sorted. If the file is not sorted, sort produces the appropriate
error messages and exits with code 1. Otherwise, sort returns 0. This option produces no output.
-m Merge only; the input files are assumed to be presorted.
-o output
The output argument is the name of an output file to be used instead of the standard output. This
file can be the same as one of the input files.
-u Unique processing to suppress all but one in each set of lines having equal keys. If used with the
-c option, check that there are no lines with duplicate keys.
The following options override the default ordering rules. When ordering options appear independent of
key field specifications, the requested field ordering rules are applied globally to all sort keys. When
attached to a specific key, the ordering options override all global ordering options for that key.
-d Only blank space and alphanumeric characters are used in making comparisons.
-f Considers all lowercase characters that have uppercase equivalents to be the same for purposes of
comparison.
-i Ignore all non-printable characters.
-n An initial numeric string, consisting of optional blank space, optional minus sign, and zero or
more digits (including decimal point) is sorted by arithmetic value.
-r Reverse the sense of comparisons.
Qshell 67
The treatment of field separators can be altered using the options:
-b Ignores leading blank space when determining the start and end of a restricted sort key. A -b
option specified before the first -k option applies globally to all -k options. Otherwise, the -b
option can be attached independently to each field argument of the -k option (see below). Note
that the -b option has no effect unless key fields are specified.
-t char The char argument is used as the field separator character. The initial char is not considered to be
part of a field when determining key offsets (see below). Each occurrence of char is significant
(for example, "char-char" delimits an empty field). If -t is not specified, blank space characters are
used as default field separators.
-T char
The char argument is used as the record separator character. This option should be used with
discretion. The -T option with an alphanumeric char typically produces undesirable results. The
default line separator is newline.
-k keydef
Select the key fields to use for sorting. keydef as the format:
field_start[type][,field_end[type]]
where field_start is the starting position and field_end is the optional ending position of a key field.
If field_end is not specified, the ending position is the end of the line. The type is a character from
the set of characters b, d, f, i, n, r. The type behaves the same as the corresponding option but
only to the specified key field. If no -k option is specified, a default sort key is used. A maximum
of nine -k options can be specified.
Operands
The path name of a file to be sorted, merged, or checked. If no file operands are specified, the standard
input is used.
Extended description
field_number[.first_character]
Fields and characters within fields are numbered starting with 1. The field_number and first_character are
positive decimal integers and specify the first character to be used as part of a sort key. If .first_character is
not specified, it refers to the first character of the field.
field_number[.last_character]
The field_number is a positive decimal integer and last_character is a non-negative decimal integer. If
last_character is not specified or is zero, it refers to the last character of the field.
If the -b option or the b type modifier is in effect, characters in fields are counted from the first non-blank
character.
Description
The split utility reads the given file (or standard input if no file is specified) and breaks it up into files of
1000 lines each.
Options
-b Create files that are byte_count bytes in length. If k is appended to the number, the file is split
into byte_count kilobyte pieces. If m is appended to the number, the file is split into byte_count
megabyte pieces.
-l Create files that are line_count lines in length.
Operands
If additional arguments are specified, the first is used as the name of the input file which is to be split. If
a second additional argument is specified, it is used as a prefix for the names of the files into which the
file is split. In this case, each file into which the file is split is named by the prefix followed by a lexically
ordered suffix in the range of "aa-zz". If the prefix argument is not specified, the default prefix is "x". The
maximum number of possible output file names is 676.
Exit status
v 0 if successful
v >0 if an error occurs
Examples
1. Split the file jdk_v11.jar into files that are 1.44MB in size and use the prefix "jdk_v11.". for the output
files.
split -b1440k jdk_v11.jar jdk_v11.
2. Split the file myapp.java into files of 100 lines each.
split -l 100 myapp.java
Related tasks:
“cmp - Compare two files” on page 57
Qshell 69
“iconv - Convert characters from one CCSID to another CCSID” on page 61
“locale - Get locale specific information” on page 173
“tr - Translate characters”
“setccsid - Set CCSID attribute for file” on page 119
“sed - Stream editor” on page 62
“sort - Sort, merge, or sequence check text files” on page 67
“uniq - Report or filter out repeated lines in a file” on page 72
tr - Translate characters
Synopsis
tr [-c] -d string1
tr [-c] -s string1
Description
The tr utility copies the standard input to the standard output with substitution or deletion of selected
characters.
In the first synopsis form, the characters in string1 are translated into the characters in string2 where the
first character in string1 is translated into the first character in string2 and so on. If string1 is longer than
string2, the last character found in string2 is duplicated until string1 is exhausted.
In the second synopsis form, the characters in string1 are deleted from the input.
In the third synopsis form, the characters in string1 are compressed as described for the -s option below.
In the fourth synopsis form, the characters in string1 are deleted from the input, and the characters in
string2 are compressed as described for the -s option below.
The following conventions can be used in string1 and string2 to specify sets of characters. Any character
not described by one of the following conventions represents itself.
nnn A backslash (\) followed by 1, 2 or 3 octal digits represents a character with that encoded value.
char To follow an octal sequence with a digit as a character, left zero-pad the octal sequence to the full
3 octal digits. A backslash (\) followed by certain special characters maps to special values. The
special characters and their values are:
v a - alert character
v b - backspace
v f - form-feed
v n - newline
v r - carriage return
v t - tab
v v - vertical tab
v A backslash (\) followed by any other character maps to that character.
c-c Represents the range of characters between the range endpoints, inclusively.
Options
-c Complement the set of characters in string1, that is -c ab includes every character except for "a"
and "b".
-d Delete characters from the input.
-s Squeeze multiple occurrences of the characters listed in the last operand (either string1 or string2)
in the input into a single instance of the character. This occurs after all deletion and translation is
completed.
Exit status
v 0 on success
v >0 if an error occurs.
Examples
1. Create a list of the words in file1, one per line, where a word is taken to be a maximal string of
letters.
tr -cs ’[:alpha:]’ ’n’ < file1
2. Translate the contents of file1 to upper-case.
tr ’[:lower:]’ ’[:upper:]’ < file1
tr ’a-z’ ’A-Z’ < file1
3. Remove the non-printable characters from file1.
tr -cd ’[:print:]’ < file1
Related concepts:
“cut - Cut out selected fields of each line of a file” on page 58
Related tasks:
“grep - Search a file for a pattern” on page 59
“iconv - Convert characters from one CCSID to another CCSID” on page 61
“sed - Stream editor” on page 62
“sort - Sort, merge, or sequence check text files” on page 67
“split - Split files into pieces” on page 69
Qshell 71
“uniq - Report or filter out repeated lines in a file”
“wc - Word, line and byte/character count” on page 73
“locale - Get locale specific information” on page 173
Description
The uniq utility reads the standard input comparing adjacent lines, and writes a copy of each unique
input line to the standard output. The second and succeeding copies of identical adjacent input lines are
not written. Repeated lines in the input will not be detected if they are not adjacent, so it may be
necessary to sort the files first.
Options
-c Precede each output line with the count of the number of times the line occurred in the input,
followed by a single space.
-d Suppress the writing of lines that are not repeated in the input.
-f fields
Ignore the first fields fields in each input line when doing comparisons. A field is a string of
non-blank characters separated from adjacent fields by blanks. Field numbers are one based, so
the first field is field one.
-s chars
Ignore the first chars characters in each input line when doing comparisons. If specified in
conjunction with the -f option, the first chars characters after the first fields fields will be ignored.
Character numbers are one based, so the first character is character one.
-u Suppress the writing of lines that are repeated in the input.
Operands
If additional arguments are specified on the command line, the first such argument is used as the name
of an input file, the second is used as the name of an output file.
Exit status
v 0 on success
v >0 if an error occurs
Examples
Description
The wc utility displays the number of lines, words, and bytes contained in each input file (or standard
input, by default) to standard output. A line is defined as a string of characters delimited by a newline
character. A word is defined as a string of characters delimited by white space characters. If more than
one input file is specified, a line of cumulative counts for all the files is displayed on a separate line after
the output for the last file.
Options
c Write to standard output the number of bytes in each input file.
l Write to standard output the number of lines in each input file.
m Write to standard output the number of characters in each input file.
w Write to standard output the number of words in each input file.
Operands
When an option is specified, wc only reports the information requested by that option. The default action
is equivalent to specifying all of the flags.
If no files are specified, the standard input is used and no file name is displayed.
Exit status
v 0 when successful
v >0 when an error occurred
Related concepts:
“cut - Cut out selected fields of each line of a file” on page 58
Related tasks:
Qshell 73
“grep - Search a file for a pattern” on page 59
“tr - Translate characters” on page 70
When processing SQL interactively or from a file, the db2 utility treats the backslash character at the end
of a line as a continuation character. The backslash and newline character are removed and the remaining
text is used as the SQL statement.
Syntax
db2 [General Options] [Delimiter Options] [Connection Options] [SQL Source Options]
General options
-v Echo the SQL statement to standard output.
-S Suppress spaces and padding in output, useful for viewing LOB columns containing text data.
Delimiter options
Connection Options
-r rdbname
Connect to specified remote database (must be name in WRKRDBDIRE). If not specified
connection is to local database.
-u username
The user profile name for connecting to remote database, can only be used with -r option.
-p username
The password to use on remote database connection.
Example
db2 select constraint_name from qsys2.syscst
db2 -t -f mysqlfile.txt
Contents of mysqlfile.txt:
select constraint_name from qsys2.syscst;
create table qgpl.testtable (c1 integer);
Perl utility
The Perl utility allows you to run Perl scripts on your system. The Perl utility is available as freeware.
For more information about downloading and using this utility, see the DB2 for i5/OS: Qshell, Perl, and
DB2 for i5/OS topic on the System i Website.
Description
The attr utility gets or sets attributes for the object specified by file. When no attributes are specified, attr
displays all of the attributes for the object in a re-entrable format to standard output. When an attribute is
specified, attr displays the value of the attribute to standard output. When an attribute and value are
specified, attr sets the attribute to the value. Note that all attributes can be displayed, but only some
attributes can be set.
For date and time attributes, the value displayed by default is formatted with the asctime() function. If
the LC_TIME environment variable is set, the value displayed is formatted with the format specified by
the d_t_fmt keyword in the LC_TIME category of the specified locale.
Qshell 75
Options
-h Display or set the attributes of a symbolic link instead of the object pointed to by the symbolic
link.
-p Display the attribute in an re-entrable format.
Operands
The file operand specifies a path name to an object. The attribute operand can have the following values:
ACCESS_TIME
The date and time the object was last accessed. This attribute can only be displayed.
ALLOC_SIZE
The number of bytes allocated for the object displayed as a 32-bit number. This attribute can only
be displayed.
ALLOC_SIZE_64
The number of bytes allocated for the object displayed as a 64-bit number. This attribute can only
be displayed.
ALWCKPWRT
An indicator if a stream file can be shared with readers and writers during the save-while-active
checkpoint processing. This attribute can be displayed or set.
ALWSAV
An indicator of whether the object can be saved or not. This attribute can be displayed or set.
ASP The auxillary storage pool in which the object is stored. This attribute can only be displayed.
AUDIT
The auditing value associated with the object. This attribute can only be displayed.
AUTH_GROUP
The name of the user profile that is the primary group for the object. This attribute can only be
displayed.
AUTH_LIST_NAME
The name of the authorization list used to secure the object. This attribute can only be displayed.
AUTH_OWNER
The name of the user profile that is the owner of the object. This attribute can only be displayed.
AUTH_USERS
The list of user profiles that are authorized to use the object. This attribute can only be displayed.
CCSID The coded character set identifier (CCSID) of the object. This attribute can be displayed or set.
CHANGE_TIME
The date and time the object's data or attributes were last changed. This attribute can only be
displayed.
CHECKED_OUT
An indicator if the object is checked out. This attribute can only be displayed.
CHECKED_OUT_USER
The user profile that has the object checked out. This attribute can only be displayed.
CHECKED_OUT_TIME
The date and time that the object was checked out. This attribute can only be displayed.
CODEPAGE
The code page derived from the coded character set identifier (CCSID) of the object. This
attribute can be displayed or set.
Qshell 77
JOURNAL_RCVR_NAME
The name of the oldest journal receiver needed to successfully Apply Journaled Changes
(APYJRNCHG). This attribute can only be displayed.
JOURNAL_ROLLBACK_ENDED
An indicator of whether the object had rollback ended before completion of a request to roll back
a transaction. This attribute can only be displayed.
JOURNAL_START_TIME
The date and time that journaling was last started for the object. This attribute can only be
displayed.
JOURNAL_STATUS
An indicator if the object is currently journaled. This attribute can only be displayed.
LOCAL_REMOTE
An indicator if the object is on the local system or a remote system. This attribute can only be
displayed.
MAIN_STG_OPT
An indicator of how main storage is allocated and used by the system for the object. This
attribute can be displayed or set.
MODIFY_TIME
The date and time that the object's data was last modified. This attribute can only be displayed.
MULT_SIGS
An indicator if the object has more than one i5/OS digital signature. This attribute can only be
displayed.
OBJTYPE
A text string describing the type of the object. This attribute can only be displayed.
PC_ARCHIVE
An indicator if the object has changed since the last time the file was examined. This attribute can
be displayed or set.
PC_HIDDEN
An indicator if the object is hidden. This attribute can be displayed or set.
PC_READ_ONLY
An indicator if the object is read-only. This attribute can be displayed or set.
PC_SYSTEM
An indicator if the object is a system object. This attribute can be displayed or set.
RSTDRNMUNL
An indicator of whether renames and unlinks are restricted for objects within a directory. Objects
can be linked into a directory that has this attribute set on, but cannot be renamed or unlinked
from it unless the user has the appropriate authority. This attribute can be displayed or set.
SCAN An indicator of whether the object will be scanned when exit programs are registered with any of
the integrated file system scan-related exit points. This attribute can be displayed or set.
SCAN_BINARY
An indicator of whether the object has been scanned in binary mode when it was previously
scanned. This attribute can only be displayed.
SCAN_CCSID1
If an object has been scanned in text mode, the first CCSID used when it was previously scanned.
This attribute can only be displayed.
Environment Variables
Exit status
v 0 when successful
v >0 when unsuccessful
Examples
Qshell 79
1. Display all of the attributes for a file.
attr script.sh
2. Display the OBJTYPE and PC_READ_ONLY attributes for a file.
attr script.sh OBJTYPE PC_READ_ONLY
3. Display the DATA_SIZE_64 attribute in a re-entrable format for a file.
attr -p script.sh DATA_SIZE_64
4. Set the PC_HIDDEN attribute for a file.
attr script.sh PC_HIDDEN=1
Related tasks:
“setccsid - Set CCSID attribute for file” on page 119
“touch - Change file access and modification times” on page 122
Related information:
Qp0lGetAttr() - Get attributes
Qp0lSetAttr() - Set attributes
Description
You can use basename to delete any prefix ending with the last slash (/) character present in string, and
a suffix, if specified. The resulting filename is written to standard output. The string is processed using
the following rules:
v If string consists entirely of slash characters, a single slash character is written to standard output and
processing ends.
v If there are any trailing slash characters in string, they are removed.
v If there are any slash characters remaining in string, the prefix of string up to and including the last
slash character is removed.
v If a suffix is specified, and is not identical to the characters remaining in string, and is identical to a
suffix of the characters remaining in string, the suffix is removed. Otherwise string is not modified. It is
not an error if suffix is not found in string.
Exit status
v 0 on success
v >0 if an error occurs.
Examples
1. Set the shell variable FOO to "trail".
FOO=$(basename /usr/bin/trail)
2. Return the last part of the path "/usr/bin/this_test" with the "test" suffix removed.
basename /usr/bin/this_test test
Related tasks:
“dirname - Return directory portion of path name” on page 91
The cat utility reads the specified files sequentially, writing them to standard output. The file operands are
processed in command line order. A single dash represents standard input.
By default, cat reads file as text data so the data is translated from the CCSID of the file. When the -c
option is specified, cat reads the file as binary data.
Note that because of the shell language mechanism used to perform output redirection, the command cat
file1 file2 > file2 will cause the original data in file2 to be destroyed. Also, the process will go into an
infinite loop.
Options
-b Number the output lines but do not number blank lines.
-c Do not convert the data as it is read.
-e Number the output lines and display a dollar sign ($) at the end of each line as well.
-n Number the output lines, starting at 1.
-s Squeeze multiple adjacent empty lines, causing the output to be single spaced.
-S Squeeze multiple adjacent empty lines, causing the output to be single spaced.
-t Display non-printing characters so they are visible like the -v option and display tab characters as
well.
-u Guarantee that the output is unbuffered.
-v Display non-printing characters so they are visible. A control character prints as "^X" (for control).
The delete character prints as "^?". A non-display character prints as "M-x" (for meta). Note that
in most locales, all of the characters are displayable.
Exit status
v 0 when successful.
v >0 when an error occurred.
Examples
1. Display the contents of file, "myfile".
cat myfile
2. Display the contents of three different files at the same time and save their contents into a new file.
cat file1 file2 file3 > all.files
Related tasks:
“head - Copy the first part of files” on page 98
“tail - Display the last part of a file” on page 120
“zcat - Expand and concatenate data” on page 125
“catsplf - Concatenate and print spool files”
“od - Dump files in various formats” on page 105
“pr - Print files” on page 113
Qshell 81
catsplf -p pid [-aen] splfname splfnum
Description
The catsplf utility reads the specified spool file and writes it to standard output.
In the first synopsis form, catsplf finds the spool files associated with the job specified by qualified-job.
In the second synopsis form, catsplf finds the spool files associated with the job specified by pid.
Options
-a Print all of the spool files associated with the specified job.
-e Number the output lines starting at 1 and display a dollar sign ($) at the end of each line.
-j qualified-job
Find the spool files associated with the job identified by qualified-job, where qualified-job is a string
in the form number/user/name. The number is a six-digit decimal number, user is the user profile
under which the job was started, and name is the name of job.
-n Number the output lines starting at 1.
-p pid Find the spool files associated with the job identified by pid, where pid is the decimal process ID
of the job.
Operands
The splfname operand specifies the name of the spool file and the splfnum operand specifies the number of
the spool file. Both operands are required to uniquely identify a spool file.
Exit status
v 0 when successful
v >0 when unsuccessful
Examples
1. Print the spool file named QPRINT and number 1 for a job using a qualified job name.
catsplf -j 386687/SHELLTST/QZSHCHLD QPRINT 1
2. Print the spool file named QPRINT and number 1 for a job using a pid.
catsplf -p 942 QPRINT 1
3. Print all of the spool files for a job.
catsplf -a -j 386687/SHELLTST/QZSHCHLD
Related tasks:
“cat - Concatenate and print files” on page 80
“Rfile - Read or write record files” on page 116
“zcat - Expand and concatenate data” on page 125
cd [ directory ]
Description
You can use cd to change the working directory. qsh sets the PWD variable to the new working directory
and the OLDPWD variable to the previous working directory.
None.
Operands
Exit status
v 0 when successful.
v >0 when unsuccessful.
Related tasks:
“hash - Remember or report utility locations” on page 139
“pwd - Return working directory name” on page 115
“pwdx - Print working directory expanded” on page 115
Description
You can use chgrp to set the group of file to the group identifier or profile specified by group.
To change the group identifier, you must have one of the following authorities:
v The current user has *ALLOBJ special authority.
v The current user is the owner of file and either one of the following:
– The primary group of the job is group.
– One of the supplemental groups of the job is group.
In addition, the current user must have *USE authority to the group profile specified by group.
By default, chgrp follows symbolic links and changes the group of the file pointed to by the symbolic
link.
Qshell 83
The -H, -L and -P options are ignored unless the -R option is specified. In addition, these options
override each other and the command's actions are determined by the last one specified.
The group of a file cannot be the same as the owner of the file.
Options
-H If the -R option is specified, symbolic links on the command line are followed. Symbolic links
encountered in the tree traversal are not followed.
-L If the -R option is specified, both symbolic links on the command line and symbolic links
encountered in the tree traversal are followed.
-P If the -R option is specified, no symbolic links are followed.
-R If file is a directory, chgrp recursively changes the group of each file in the entire subtree
connected at that point.
-h Change the owner and group of a symbolic link instead of the file pointed to by the symbolic
link.
Operands
The group operand specifies either a group identifier number or group profile name. The file operand
specifies a path name to an object.
Exit status
v 0 when successful and all requested changes were made.
v >0 when an error occurred.
Examples
1. Change the group to group profile "abbey" for the file "newgui.java".
chgrp abbey newgui.java
2. Change the group to group profile "managers" for the subdirectory "personal.dir" and all files and
subdirectories below this directory.
chgrp -R managers personal.dir
3. Change the group to group identifier "442" for the file "memo.txt".
chgrp 442 memo.txt
Related tasks:
“chmod - Change file modes”
“chown - Change file ownership” on page 87
“ls - List directory contents” on page 99
Description
The chmod utility modifies the file mode bits of file as specified by the mode operand.
To change the mode of a file, you must have one of the following authorities:
v The current user has *ALLOBJ special authority.
v The current user is the owner of the file.
The -H, -L and -P options are ignored unless the -R option is specified. In addition, these options
override each other and the command's actions are determined by the last one specified.
Note that chmod changes the i5/OS data authorities for an object. Use the CHGAUT CL command to
change the i5/OS object authorities for an object.
Options
-H If the -R option is specified, symbolic links on the command line are followed. Symbolic links
encountered in the tree traversal are not followed. Since symbolic links do not have modes
chmod has no effect on the symbolic links.
-L If the -R option is specified, both symbolic links on the command line and symbolic links
encountered in the tree traversal are followed.
-P If the -R option is specified, no symbolic links are followed. Since symbolic links do not have
modes chmod has no effect on the symbolic links.
-R If file designates a directory, chmod changes the mode of each file in the entire subtree connected
at that point.
-h Do not follow symbolic links. Since symbolic links do not have modes chmod has no effect on
the symbolic links.
Operands
A mode may be absolute or symbolic. An absolute mode is a three or four digit octal number constructed
by or-ing the following values:
4000 Set-user-id on execute bit
2000 Set-group-id on execute bit
1000 Restricted deletion bit for a directory
0400 Allow read by owner
0200 Allow write by owner
0100 Allow execute/search by owner
0040 Allow read by group
0020 Allow write by group
0010 Allow execute/search by group
0004 Allow read by other
0002 Allow write by other
0001 Allow execute/search by other
Qshell 85
v op ::= + | - | =
v perm ::= r | w | x | X | s | t | u | g | o
The who symbols specify who is granted or denied the permissions as follows:
u The owner permission bits.
g The group permission bits.
o The other permission bits.
a The owner, group, and other permission bits. It is equivalent to specifying the ugo symbols
together.
The perm symbols represent the portions of the mode bits as follows:
r The read bits.
w The write bits.
x The execute/search bits.
X The execute/search bits if the file is a directory or if any of the execute/search bits are set in the
original (unmodified) mode. Operations with this symbol are only meaningful in conjunction
with the op symbol "+", and are ignored in all other cases.
s The set-user-id on execute bit when the owner permission bits are set or the set-group-id on
execute bit when the group permission bits are set.
t The restricted deletion bit when the object is a directory. It can be used when the who symbol is a
or there is no who symbol. It is ignored if the file is not a directory or the who symbol is u, g, or
o.
Each clause specifies one or more operations to be performed on the mode bits, and each operation is
applied to the mode bits in the order specified.
Exit status
v 0 on success
v >0 if an error occurs
Examples
1. Grant read and write permission to owner and read permission to group and other using an absolute
mode.
Description
You can use chown to set the owner of file to the user identifier or profile specified by owner. Optionally,
chown can also set the group of the file to the group identifier or profile specified by group.
To change the owner of a file, you must have one of the following authorities:
v The current user has *ALLOBJ special authority.
v The current user is the owner of the file or directory.
To change the group of a file, you must have one of the following authorities:
v The current user has *ALLOBJ special authority.
v The current user is the owner of file and either one of the following:
– The primary group of the job is group.
– One of the supplemental groups of the job is group.
In addition, the current user must have *USE authority to the new user profile or group profile.
By default, chown follows symbolic links and changes the owner and group of the file pointed to by the
symbolic link.
The group of a file cannot be the same as the owner of the file.
Options
Qshell 87
-H If the -R option is specified, symbolic links on the command line are followed. Symbolic links
encountered in the tree traversal are not followed.
-L If the -R option is specified, both symbolic links on the command line and symbolic links
encountered in the tree traversal are followed.
-P If the -R option is specified, no symbolic links are followed.
-R If file designates a directory, chown recursively changes the owner and group of each file in the
entire subtree connected at that point.
-h Change the owner and group of a symbolic link instead of the file pointed to by the symbolic
link.
Operands
The owner operand specifies either a user identifer number or a user profile name. The group operand
specifies either a group identifier number or a group profile name. The file operand specifies a path name
to an object.
Exit status
v 0 when successful and all requested changes were made.
v >0 when an error occurred.
Examples
1. Change the owner to user profile "sam" for the file "personal.file".
chown sam personal.file
2. Recursively change the owner to user profile "larry" for the sub-directory "moe.dir" and all files and
sub-directories below this directory.
chown -R larry moe.dir
3. Change the owner to user identifier "500" for the file "your.file".
chown 500 your.file
4. Change the owner to user profile "sam" and the group to group profile "abbey" for the file "memo.txt".
chown sam:abbey memo.txt
Related tasks:
“chgrp - Change file group ownership” on page 83
“ls - List directory contents” on page 99
“setccsid - Set CCSID attribute for file” on page 119
Description
The compress utility reduces the size of the files using adaptive Lempel-Ziv coding. Each file is renamed
to the same name plus the extension ".Z". As many of the modification time, access time, file flags, file
mode, user ID, and group ID as allowed by permissions are retained in the new file. If compression
would not reduce the size of a file, the file is ignored.
If renaming file would cause files to be overwritten and the standard input device is a terminal, the user
is prompted (on standard error) for confirmation. If prompting is not possible or confirmation is not
received, the files are not overwritten.
Operands
Each file is a pathname of a file to compress. If no files are specified, the standard input is compressed to
the standard output. If either the input or output files are not regular files, the checks for reduction in
size and file overwriting are not performed, the input file is not removed, and the attributes of the input
file are not retained.
Extended description
The compress utility uses a modified Lempel-Ziv algorithm. Common substrings in the file are first
replaced by 9-bit codes 257 and up. When code 512 is reached, the algorithm switches to 10-bit codes and
continues to use more bits until the limit specified by the -b flag is reached (the default is 16). Bits must
be between 9 and 16.
After the bits limit is reached, compress periodically checks the compression ratio. If it is increasing,
compress continues to use the existing code dictionary. However, if the compression ratio decreases,
compress discards the table of substrings and rebuilds it from scratch. This allows the algorithm to adapt
to the next "block" of the file.
The amount of compression obtained depends on the size of the input, the number of bits per code, and
the distribution of common substrings. Typically, text such as source code or English is reduced by
50-60%.
Exit status
v 0 on success
v >0 if an error occurs.
Related tasks:
“pax - Portable archive interchange” on page 106
“uncompress - Expand compressed data” on page 124
“zcat - Expand and concatenate data” on page 125
cp - Copy files
Synopsis
Description
In the first synopsis form, the cp utility copies the contents of the source_file to the target_file.
In the second synopsis form, the cp utility copies the contents of each named source_file to a file in the
destination target_directory. The names of the files themselves are not changed. The target_directory must
exist unless there is only one named source_file which is a directory and the -R flag is specified.
Qshell 89
If cp detects an attempt to copy a file to itself, the copy will fail.
If target_file does not exist, the mode of the source_file is used, as modified by the file creation mask, when
creating target_file. The S_ISUID and S_ISGID file permission bits are never set when creating a new file.
If target_file already exists and the -t option is not specified, its contents are overwritten as binary data
and the CCSID attribute is changed to match the CCSID attribute of source_file. The file permission bits,
owner, and group of target_file are unchanged. You can force the data to be copied as text data by using
the -t option. You can force the file permission bits, owner, and group to be copied using the -p option.
Note that when copying to members in the QSYS.LIB file system, many attributes of source_file cannot be
preserved because they are associated with the file object and not the member.
Symbolic links are always followed unless the -h option is specified or the -R option is specified with the
-H or the -L options. The -H, -L and -P options are ignored unless the -R option is specified. In addition,
these options override each other and the command's actions are determined by the last one specified.
Options
-H If the -R option is specified, symbolic links on the command line are followed. Symbolic links
encountered in the tree traversal are not followed and the symbolic link is copied instead of the
file pointed to by the symbolic link.
-L If the -R option is specified, both symbolic links on the command line and symbolic links
encountered in the tree traversal are followed.
-P If the -R option is specified, no symbolic links are followed. A symbolic link encountered in the
tree traversal is copied instead of the file pointed to by the symbolic link.
-R If source_file designates a directory, cp copies the directory and the entire subtree connected at
that point. This option causes cp to create special files rather than copying them as normal files.
Created directories have the same mode as the corresponding source directory, unmodified by the
file creation mask.
-f Remove target_file if it cannot be opened for write operations. A new file is created before the
data is copied.
-h Copy symbolic links instead of the file pointed to by the symbolic link.
-i Write a prompt to standard error before copying a file that would overwrite an existing file. If the
response from the standard input begins with the first character for the YES response in the
current locale, the file copy is attempted.
-p Preserve in the copy as many of the modification time, access time, file permission bits, owner,
and group as allowed by permissions.
If the owner and group cannot be preserved, no error message is displayed and the exit value is
not altered.
The S_ISUID and S_ISGID file permission bits are only copied when both the owner and group of
the file are successfully copied.
-r Same as -R except this option copies special files in the same manner as regular files. The -R flag
is preferred to the -r flag.
-t When the target file exists, treat the data in source_file as text data and translate the data to the
CCSID associated with target_file as it is copied. The CCSID attribute of target_file is not changed.
Examples
1. Copy the file, "file1", into the subdirectory, "data.dir".
cp file1 data.dir
2. Copy all the files with the .java extension from the "code" subdirectory into the subdirectory,
"code/old_code.dir" and prompt the user for overwrite verification only if the file already exists in the
subdirectory, "code/old_code.dir".
cp -i code/*.java code/old_code.dir
Related tasks:
“ln - Link files” on page 98
“ls - List directory contents” on page 99
“mv - Move files” on page 104
“rm - Remove directory entries” on page 117
“rmdir - Remove directories” on page 118
“umask - Get or set the file mode creation mask” on page 123
dirname string
Description
You can use dirname to delete the filename portion, beginning with the last slash character (/) to the end
of string, and write the result to standard output. The string is processed using the following rules:
v If string consists entirely of slash characters, a single slash character is written to standard output and
processing ends.
v If there are any trailing slash characters in string, they are removed.
v If there are no slash characters remaining in string, a period character is written to standard output and
processing ends.
v If there are trailing non-slash characters in string, they are removed.
v If there are any trailing slash characters in string, they are removed.
v If the remaining string is empty, string is set to a single slash character.
Operands
The string operand is the path name of which dirname will return the directory portion of.
Exit status
v 0 on success
v >0 if an error occurs.
Examples
Qshell 91
“basename - Return non-directory portion of path name” on page 80
Description
In the first synopsis form, the file utility determines the type of object for the specified file. The file
utility will make a best guess determination of the type. The file type is then written to standard output.
If the pathname is determined to be a regular file, file examines the first 1024 bytes to determine the
type. By default, the file utility uses the /etc/magic file to help identify files that have defined patterns
at specified byte offsets within the object.
In the second synopsis form, the file utility checks the specified MagicFile for format errors.
Options
-c Checks a specified magic file for format errors.
-f ListFile
Specifies a file containing a list of file names to be tested. This ListFile must have only one file per
line and not contain leading or trailing spaces.
-m MagicFile
Specifies the name of the magic file to use. The default magic file is /etc/magic.
Operands
Exit status
v 0 when successful
v >0 when an error occurred
Related tasks:
“find - Find files”
Description
The find utility recursively descends the directory tree for each file listed, evaluating an expression
(composed of the "primaries" and "operands" listed below) in terms of each file in the tree.
Options
-H Symbolic links on the command line are followed. Symbolic links encountered in the tree
traversal are not followed. The file information and file type returned for each symbolic link
specified on the command line is for the file referenced by the link. If the referenced file does not
exist, the file information and type will be for the link itself.
-L Both symbolic links on the command line and symbolic links encountered in the tree traversal are
Primaries
-atime n
True if the difference between the file last access time and the time find was started, rounded up
to the next full 24-hour period, is n 24-hour periods.
-ctime n
True if the difference between the time of last change of file status information and the time find
was started, rounded up to the next full 24-hour period, is n 24-hour periods.
-exec utility [argument ...] ;
True if the program named utility returns a zero value as its exit status. Optional arguments may
be passed to the utility. The expression must be terminated by a semicolon (;). If the string "{}"
appears anywhere in the utility name or the arguments it is replaced by the path name of the
current file. The utility is run from the directory from which find was run. Since the semicolon is
also a special character for the shell, you may need to escape the semicolon so it is passed as an
argument to find.
-group gname
True if the file belongs to the group gname. If gname is numeric and there is no such group name,
then gname is treated as a group identifier.
-inum n
True if the file has inode number n.
-links n
True if the file has n links.
-ls This primary always evaluates to true. The following information for the current file is written to
standard output:
v inode number
v size in kilobytes
v file permissions
v number of hard links
v owner
v group
v size in bytes
v last modification time
Qshell 93
v path name
If the file is a block or character special file, the major and minor numbers will be displayed
instead of the size in bytes. If the file is a symbolic link, the path name of the linked-to file will
be displayed preceded by `->'.
-mtime n
True if the difference between the file last modification time and the time find was started,
rounded up to the next full 24-hour period, is n 24-hour periods.
-ok utility [argument...] ;
The -ok primary is identical to the -exec primary with the exception that find requests user
affirmation for running the utility by printing a message to standard error and reading a
response. If the response is other than the first character of the YES response in the current locale,
the utility is not run and the value of the ok expression is false.
-name pattern
True if the last component of the path name being examined matches pattern. Special shell pattern
matching characters ([, ], *, and ?) may be used as part of pattern. These characters may be
matched explicitly by escaping them with a backslash (\).
-newer file
True if the current file has a more recent last modification time than file.
-nouser
True if the file belongs to an unknown user.
-nogroup
True if the file belongs to an unknown group.
-path pattern
True if the path name being examined matches pattern. Special shell pattern matching characters
([, ], *, and ?) may be used as part of pattern. These characters may be matched explicitly by
escaping them with a backslash (\). Slashes (/) are treated as normal characters and do not need
to be matched explicitly.
-perm [-]mode
The mode can be either symbolic or an octal number in the formats supported by the chmod
command. If the mode is symbolic, a starting value of zero is assumed and the mode sets or clears
permissions without regard to the process file mode creation mask. If the mode is octal, only bits
00777 (S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison. If
the mode is preceded by a dash (-), this primary evaluates to true if at least all of the bits in the
mode are set in the file's mode bits. If the mode is not preceded by a dash, this primary evaluates
to true if the bits in the mode exactly match the file's mode bits. Note, the first character of a
symbolic mode may not be a dash (-).
-print This primary always evaluates to true. It prints the path name of the current file to standard
output. The expression is appended to the user specified expression if neither -exec, -ls nor -ok is
specified.
-prune
This primary always evaluates to true. It causes find to not descend into the current file. Note,
the -prune primary has no effect if the -d option was specified.
-size n[c]
True if the file's size, rounded up, in 512-byte blocks is n. If n is followed by c, then the primary
is true if the file's size is n bytes.
-type t True if the file is of the specified type. Possible file types are as follows:
v b for block special
v c for character special
v d for directory
All primaries which take a numeric argument allow the number to be preceded by a plus sign (+) or a
minus sign (-). A preceding plus sign means "more than n", a preceding minus sign means "less than n"
and neither means "exactly n".
Operators
The primaries may be combined using the following operators. The operators are listed in order of
decreasing precedence.
(expression)
This evaluates to true if the parenthesized expression evaluates to true.
!expression
This is the unary NOT operator. It evaluates to true if the expression is false.
expression -and expression
The -and operator is the logical AND operator. As it is implied by the juxtaposition of two
expressions it does not need to be specified. The expression evaluates to true if both expressions
are true. The second expression is not evaluated if the first expression is false.
expression -or expression
The -or operator is the logical OR operator. The expression evaluates to true if either the first or
the second expression is true. The second expression is not evaluated if the first expression is
true.
All operands and primaries must be separate arguments to the find utility. Primaries which themselves
take arguments expect each argument to be a separate argument to find. Notes
The special characters used by find are also special characters to many shell programs. In particular, the
characters *, [, ], ?, (, ), !, and ; may need to be escaped from the shell.
Exit status
v 0 on success
v >0 if an error occurs
Examples
1. Find all *.class files starting at the directory "/project/java/class".
find /project/java/class -name ’*.class’
2. Find all the *.java files that have the "import java.awt;" string in them starting at the directory,
"/project/java/code".
find /project/java/code -name ’*.java’ -exec grep ’import java.awt;’ {} \;
3. Find all the *.class files starting at the directory "/project/java/class" and remove the files.
find /project/java/class -name ’*.class’ -exec rm {} \;
4. Find all the files that belong to the user "abbey" starting at the directory, "/project".
find /project -user abbey
Related concepts:
Qshell 95
“file - Determine file type” on page 92
Related tasks:
“xargs - Construct argument lists and invoke utility” on page 56
“chmod - Change file modes” on page 84
gencat [-C ccsid] [-m mode ] [-t text] catfile msgfile ...
Description
The gencat utility generates a formatted message catalog catfile from the message text source file msgfile.
You can specify up to 300 message text source files. Message text source files are processed in the
sequence specified. Each successive source file modifies the catalog. If a message number in the source
file already exists in the message catalog, the new message text defined in the source file replaces the old
message text in the message catalog file. If a message number in the source file does not already exist in
the message catalog, the message information is added to the message catalog.
Options
-C ccsid
Create the message catalog and store the message text in the specified ccsid.
-m mode
Set the file permission bits of the message catalog to the specified mode. The mode argument can
be in any of the formats supported by the chmod command. If a symbolic mode is specified, the
operation characters + and - are interpreted relative to an initial mode of "a=rw".
-t text Assign the specified text to the message catalog object. Assigning text to objects is dependent on
the support provided by the file system or object type used for the message catalog.
Operands
The catfile operand specifies the path to the message catalog to be changed or created. If the -m option is
not specified, the message catalog is created using a default mode that allows read and write permission
for the owner, group, and others (0666) as modified by the current file creation mask.
Each msgfile specifies the path to an input message text source file. There is a limit of 300 message text
source files.
Exit status
v 0 when successful
v >0 when unsuccessful
Examples
1. Create a message catalog using one message text source file.
gencat product.cat msg.src
2. Create a message catalog using multiple message text source files.
gencat product.cat msg1.src msg2.src msg3.src
3. Create a message catalog and set the mode and ccsid.
gencat -C 37 -m a-w product.cat msg.src
Related tasks:
“chmod - Change file modes” on page 84
Description
The getconf utility displays the POSIX configuration variables. If you specify name, getconf displays the
value of the configuration variable on standard output. When the configuration variable depends on a
path name you must specify pathname.
When no arguments are specified, getconf displays a list of all the configuration variables and their
values. For those configuration variables that depend on a path name, getconf uses /.
Options
None.
Operands
Qshell 97
STREAM_MAX
Maximum number of streams that a job can have open at one time.
THREAD_SAFE
The object represented by pathname resides in a thread-safe file system.
Exit status
v 0 when successful.
v >0 when successful.
Examples
1. Determine if the directory /home is in a thread-safe file system:
getconf THREAD_SAFE /home
2. Display the maximum number of bytes in a file name:
getconf NAME_MAX
3. Display all of the configuration variables:
getconf
Description
The head utility displays the first count lines of each of the specified files, or of standard input if no files
are specified. If -n is not specified, then the first 10 lines of the file are displayed.
If more than one file is specified, each file is preceded by a header consisting of the string "==> XXX <=="
where XXX is the name of the file.
Options
-n Display count number of lines.
Exit status
v 0 on success
v >0 if an error occurs.
Examples
ln - Link files
Synopsis
The ln utility creates a new directory entry (linked file) which has the same modes as the original file. It
is useful for maintaining multiple copies of a file in many places at once without using up storage for the
copies. Instead, a link "points to" the original copy. There are two types of links: hard links and symbolic
links. How a link "points to" a file is one of the differences between a hard or symbolic link.
By default ln makes hard links. A hard link to a file is indistinguishable from the original directory entry;
any changes to a file are effective independent of the name used to reference the file. Hard links may not
normally refer to directories and may not span file systems.
A symbolic link contains the name of the file to which it is linked. Symbolic links may span file systems
and may refer to directories.
Given one or two arguments, ln creates a link to an existing file source_file. If target_file is given, the link
has that name. Target_file may also be a directory in which to place the link. Otherwise it is placed in the
current directory. If only the directory is specified, the link will be made to the last component of
source_file.
Given more than two arguments, ln makes links in target_dir to all the named source files. The links
made will have the same name as the files being linked to.
Options
-f Unlink any already existing file, permitting the link to occur.
-s Create a symbolic link.
Exit status
v 0 when success
v >0 when an error occurs
Examples
1. Create a symbolic link from the file, "/usr/bin/perl5" to the file "/usr/bin/perl".
ln -s /usr/bin/perl5 /usr/bin/perl
2. Create a new link from the file "/usr/bin/qsh" to the file "/bin/qsh" and unlink the file "/bin/qsh" if
it exists.
ln -f /usr/bin/qsh /bin/qsh
Related tasks:
“cp - Copy files” on page 89
“ls - List directory contents”
“mv - Move files” on page 104
“rm - Remove directory entries” on page 117
“rmdir - Remove directories” on page 118
Description
Qshell 99
For each operand that names a file of a type other than directory, ls displays its name as well as any
requested, associated information. For each operand that names a file of type directory, ls displays the
names of files contained within that directory, as well as any requested, associated information.
If no operands are given, the contents of the current directory are displayed. If more than one operand is
given, non-directory operands are displayed first; directory and non-directory operands are sorted
separately and in lexicographical order.
Options
-A List all entries except for "." and "..".
-C Force multi-column output; this is the default when output is to a terminal.
-F Display a slash (/) immediately after each path name that is a directory, an asterisk (*) after each
that is executable, and an at sign (@) after each symbolic link.
-L If argument is a symbolic link, list the file or directory the link references rather than the link
itself.
-R Recursively list subdirectories.
-S Display the CCSID attribute for the file.
-T Display complete time information for the file, including month, day, hour, minute, second, and
year when the -l option is also specified.
-a Include directory entries whose names begin with a dot (.).
-c Use time when file status was last changed for sorting or printing.
-d Directories are listed as plain files (not searched recursively) and symbolic links in the argument
list are not indirected through.
-f Output is not sorted.
-i For each file, print the file's file serial number (inode number).
-l (Lowercase letter `ell.') List in long format. See Extended Description below for details. If the
output is to a terminal, a total sum for all the file sizes is output on a line before the long listing.
-o Include the file flags in a long (-l) output.
-q Force printing of non-graphic characters in file names as the question mark (?) character. This is
the default when output is to a terminal.
-r Reverse the order of the sort to get reverse lexicographical order or the oldest entries first.
-s Display the number of bytes actually allocated for each file, in units of 1024 bytes, where partial
units are rounded up to the next integer value.
-t Sort by time modified (most recently modified first) before sorting the operands by
lexicographical order.
-u Use time of last access, instead of last modification of the file for sorting (-t) or printing (-l).
-1 (The numeric digit one) Force output to be one entry per line. This is the default when output is
not to a terminal.
The -1, -C, and -l options all override each other. The last one specified determines the format used.
The -c, and -u options override each other. The last one specified determines the file time used.
By default, ls lists one entry per line to standard output; the exceptions are to terminals or when the -C
option is specified.
Extended description
If the -l option is specified, the following long format information is displayed for each file:
v file mode,
v number of links,
v owner name,
v group name,
v number of bytes in the file,
v time the file was last modified, and
v the path name.
If the file was modified within six months of the current date, the time is displayed as the abbreviated
month, day-of-month, hour, and minute. Otherwise the time is displayed as the abbreviated month,
day-of-month, and four-digit year.
In addition, for each directory whose contents are displayed, the total number of bytes used by the files
in the directory is displayed on a line by itself immediately before the information for the files in the
directory.
If the owner or group names are not a known user or group name the numeric identifiers are displayed.
If the file is a character special or block special file, the major and minor device numbers for the file are
displayed in the size field. If the file is a symbolic link the pathname of the linked-to file is preceded by
"->".
The file mode consists of the entry type, owner permissions, group permissions, and other permissions.
The entry type character describes the type of file, as follows:
v b for a block special file.
v c for a character special file.
v d for a directory.
v l for a symbolic link.
v p for a pipe.
v s for a socket.
v - for a regular file.
The owner permissions, group permissions, and other permissions are each three characters. Each field
has three character positions:
v For the first position, if the value is r, the file is readable. If the value is -, it is not readable.
v For the second position, if the value is w, the file is writable. If the value is -, it is not writable.
v For the third position,
– If the value is S for the owner permissions, the set-user-ID mode is set. If the value is S for the
group permissions, the set-group-ID mode is set.
– If the value is s for the owner permissions, the file is executable and the set-user-ID mode is set. If
the value is s for the group permissions, the file is executable and the set-group-ID mode is set.
– If the value is x, the file is executable or the directory is searchable.
– If the value is -, the object is not executable or searchable.
Environment variables
Qshell 101
ls is affected by the following environment variables:
COLUMNS
If this variable contains a string representing a decimal integer, it is used as the column position
width for displaying multiple-text-column output. The ls utility calculates how many path name
text columns to display based on the width provided. See the -C option.
Exit status
v 0 on success
v >0 if an error occurs.
Examples
1. Display the list of files in the current directory using the long format.
ls -l
2. Display all date and time details for the file "myfile".
ls -lT myfile
-rwxrwxrwx 1 abbey 0 592 Sep 12 22:47:01 1998 myfile
Related tasks:
“chgrp - Change file group ownership” on page 83
“chmod - Change file modes” on page 84
“chown - Change file ownership” on page 87
“cp - Copy files” on page 89
“ln - Link files” on page 98
“mkdir - Make directories”
“mv - Move files” on page 104
“rm - Remove directory entries” on page 117
“rmdir - Remove directories” on page 118
Description
The mkdir utility creates the directories named as operands, in the order specified, using mode
rwxrwxrwx (0777) as modified by the current file creation mask.
Options
-m Set the file permission bits of the final created directory to the specified mode. The mode
argument can be in any of the formats supported by the chmod command. If a symbolic mode is
specified, the operation characters + and - are interpreted relative to an initial mode of "a=rwx".
-p Create intermediate directories as required. If this option is not specified, the full path prefix of
each operand must already exist. Intermediate directories are created with permission bits of
rwxrwxrwx (0777) as modified by the current file creation mask, plus write and search
permission for the owner.
Exit status
v 0 if successful
Examples
Create the directories "new", "java", "test", "dir", "4" and "bob" and set the mode to read, write and
execute for owner.
mkdir -p -m 700 /new/java/test/dir/4/bob
Related tasks:
“chmod - Change file modes” on page 84
“ls - List directory contents” on page 99
“rmdir - Remove directories” on page 118
“umask - Get or set the file mode creation mask” on page 123
“mkfifo - Make FIFO special files”
Description
The mkfifo utility creates the FIFO special files named as operands, in the order specified, using a
default mode that allows read and write permission for the owner, group, and others (0666) as modified
by the current file creation mask.
Options
-m mode
Set the file permission bits of the FIFO special file to the specified mode. The mode argument can
be in any of the formats supported by the chmod command. If a symbolic mode is specified, the
operation characters + and - are interpreted relative to an initial mode of "a=rw".
-p Create intermediate directories as required. If this option is not specified, the full path prefix of
each file must already exist. Intermediate directories are created with a default mode that allows
read, write, and search permission for the owner, group, and others (0777) as modified by the
current file creation mask.
Operands
Exit status
v 0 if successful
v >0 if an error occurred.
Examples
1. Create the FIFO special files "fifo1" and "fifo1":
mkfifo fifo1 fifo2
2. Create the the FIFO special file "fifo1" and set the permissons to read, write and execute for the
owner:
mkfifo -m 700 myfifo
3. Create the the FIFO special file "/dir1/dir2/fifo1" and each directory in the path that does not exist:
Qshell 103
mkfifo -p /dir1/dir2/fifo1
Related tasks:
“chmod - Change file modes” on page 84
“mkdir - Make directories” on page 102
“umask - Get or set the file mode creation mask” on page 123
mv - Move files
Synopsis
Description
In its first form, the mv utility renames the file named by the source_file operand to the destination path
named by the target_file operand. This form is assumed when the last operand does not name an already
existing directory.
In its second form, mv moves each file named by a source_file operand to a destination file in the existing
directory named by the target_dir operand. The destination path for each source_file operand is the path
name produced by the concatenation of target_dir, a slash, and the final path name component from
source_file.
It is an error for either the source_file operand or the destination path to specify a directory except when
both are directories.
If the destination path does not have a mode which permits writing, mv prompts the user for
confirmation as specified for the -i option.
Options
-f Do not prompt for confirmation before overwriting the destination path. The -i option is ignored
if the -f option is specified.
-i Write a prompt to standard error before moving a file that would overwrite an existing file. If the
response from the standard input begins with the first character for the YES response in the
current locale, the move is attempted.
Exit status
v 0 on success
v >0 if an error occurs
Examples
Move the file "perl5" into the directory "/usr/bin" and prompt the user to overwrite if the file exists.
mv -i perl5 /usr/bin
Related tasks:
“cp - Copy files” on page 89
“ln - Link files” on page 98
“ls - List directory contents” on page 99
“rm - Remove directory entries” on page 117
od [-A address_base] [-j skip] [-N count] [-t type_string] [-Cbcdosvx] [file...]
Description
The od utility writes the contents of the specified files to standard output in a user-specified format. If the
file parameter is not given, the od command reads standard input. The format is specified by the -t flag.
If no format type is specified, -t oS is the default.
Options
-A address_base
Specifies the format for the output offset base. The address_base can be one of these values:
v d for decimal,
v o for octal,
v x for hexadecimal, or
v n for none.
In the case of n, the offset base is not displayed. If -A is not specified, -A o is the default.
-b Output bytes in octal. It is equivalent to -t 01.
-C Display the CCSID of the file to standard output before the rest of the output is written.
-c Output bytes as characters. It is equivalent to -t c.
-d Output bytes in unsigned decimal. It is equivalent to -t u2.
-j skip Specifies the number of bytes to skip before beginning to display output. If more than one file is
specified, the number of bytes will be used on the concatenated input of all files specified. An
error will occur if this number is larger than the size of the concatenated inputs. This value can
be specified in hexadecimal (preceded by 0x or 0X), octal (preceded by 0), or decimal (default).
-N count
Specifies the number of bytes to be written. By default, the whole file will be written. This value
can be specified in hexadecimal (preceded by 0x or 0X), octal (preceded by 0), or decimal
(default).
-o Output bytes in octal. It is equivalent to -t o2.
-s Output bytes in signed decimal. It is equivalent to -t d2.
-t type_string
Specifies one or more output types. The type specified must be a string containing all of the
formatting types that you want. The type_string can contain these values:
v a for character,
v c for character,
v d for signed decimal,
v f for floating point,
v o for octal,
v u for unsigned decimal, or
v x for hexadecimal.
The type specifications of a and c may give unexpected results since they depend on the CCSID
on the data. The a type specifier displays non-printable characters as named characters. The c
type specifier displays non-printable characters as three digit octal numbers.
Qshell 105
The type specifications of d, o, u and x can also be followed by 1, 2, 4, C, S, I or L. These specify
the number of bytes to be transformed by each instance of the output type. The values C, S, I
and L correspond to char, short, int and long.
The type specification of f can be followed by by 4, 8, F, D or L. These specify the number of
bytes to be transformed by each instance of the output type. The values F, D and L correspond to
float, double, and long double. If -t is not specified, the default is -t oS.
-v Write all input data. Without this option, repeated output lines will not be written. When repeats
occur, only an asterisk (*) will be written.
-x Output bytes in hexadecimal. It is equivalent to -t x2.
Operands
Each file is a path name of an object to be written to standard output. If no file operands are specified,
standard input will be used.
Exit status
v 0 when successful
v >0 when an error occurred.
Examples
1. Dump a file in hexadecimal format.
od -tx output.txt
2. Dump the first 50 bytes of a file.
od -N50 output.txt
3. Skip the first 100 bytes and then dump the rest of a file.
od -j100 output.txt
4. Dump a file in both hexadecimal and character format.
od -tx1 -tc output.txt
Related tasks:
“cat - Concatenate and print files” on page 80
“pr - Print files” on page 113
pax [-cdnv] [-E limit] [-f archive] [-s replstr ...] [-U user ...] [-G group ...] [-T [from_date][,to_date] ...] [pattern
...]
pax -r [-cdiknuvDYZ] [-C ccsid ] [-E limit] [-f archive] [-o options ...] [-p string ...] [-s replstr ...] [-U user ...]
[-G group ...] [-T [from_date][,to_date] ...] [pattern ...]
pax -w [-dituvHLPX] [-b blocksize] [[-a] [-f archive]] [-x format] [-B bytes] [-s replstr ...] [-o options ...] [-U
user ...] [-G group ...] [-T [from_date][,to_date][/[c][m]] ...] [file ...]
pax -r -w [-diklntuvDHLPXYZ] [-p string ...] [-s replstr ...] [-U user ...] [-G group ...] [-T
[from_date][,to_date][/[c][m]] ...] [file ...] directory
Description
The pax utility reads, writes, and lists the members of an archive file, and copies directory hierarchies.
pax operation is independent of the specific archive format, and supports a wide variety of different
archive formats. A list of supported archive formats can be found under the description of the -x option.
While processing a damaged archive during a read or list operation, pax will attempt to recover from
media defects and will search through the archive to locate and process the largest number of archive
members possible (see the -E option for more details on error handling).
Options
-r Read an archive file from standard input and extract the specified files. If any intermediate
directories are needed in order to extract an archive member, these directories will be created as if
mkdir was called with the bitwise inclusive OR of S_IRWXU, S_IRWXG, and S_IRWXO as the
mode argument. When the selected archive format supports the specification of linked files and
these files cannot be linked while the archive is being extracted, pax will write a diagnostic
message to standard error and exit with a nonzero exit status at the completion of operation.
-w Write files to the standard output in the specified archive format. When no file operands are
specified, standard input is read for a list of path names with one per line without any leading or
trailing <blanks>.
-a Append files to the end of an archive that was previously written. If an archive format is not
specified with a -x option, the format currently being used in the archive will be selected. Any
attempt to append to an archive in a format different from the format already used in the archive
Qshell 107
will cause pax to exit immediately with a non-zero exit status. The blocking size used in the
archive volume where writing starts will continue to be used for the remainder of that archive
volume.
-b blocksize
When writing an archive, block the output at a positive decimal integer number of bytes per
write to the archive file. The blocksize must be a multiple of 512 bytes with a maximum of 32256
bytes. A blocksize can end with k or b to specify multiplication by 1024 (1K) or 512. A pair of
blocksizes can be separated by x to indicate a product. When blocking is not specified, the default
blocksize is dependent on the specific archive format being used (see the -x option).
-c Match all file or archive members except those specified by the pattern and file operands.
-d Cause files of type directory being copied or archived, or archive members of type directory
being extracted, to match only the directory file or archive member and not the file hierarchy
rooted at the directory.
-f archive
Specify archive as the path name of the input or output archive, overriding the default standard
input (for list and read) or standard output (for write). A single archive may span multiple files
and different archive devices. When required, pax will prompt for the path name of the file or
device of the next volume in the archive.
-i Interactively rename files or archive members. For each archive member matching a pattern
operand or each file matching a file operand, pax will prompt to the terminal giving the name of
the file, its file mode and its modification time. pax then reads a line from the terminal. If this
line is blank, the file or archive member is skipped. If this line consists of a single period, the file
or archive member is processed with no modification to its name. Otherwise, its name is replaced
with the contents of the line. pax will immediately exit with a non-zero exit status if EOF is
encountered when reading a response. If the LC_TIME environment variable is set, the
modification time is formatted using the format specified by the d_t_fmt keyword in the
LC_TIME category of the specified locale.
-k Do not overwrite existing files.
-l (The lowercase letter ell) Link files. In the copy mode ( -r -w), hard links are made between the
source and destination file hierarchies whenever possible.
-n Select the first archive member that matches each pattern operand. No more than one archive
member is matched for each pattern. When members of type directory are matched, the file
hierarchy rooted at that directory is also matched (unless -d is also specified).
-o Information to modify the algorithm for extracting or writing archive files which is specific to the
archive format specified by -x. In general, options take the form: name=value.
-p string
Specify one or more file characteristic options (privileges). The string is a string specifying file
characteristics to be retained or discarded on extraction. The string consists of the specification
characters a, e, m, o, and p. Multiple characteristics can be concatenated within the same string
and multiple -p options can be specified. The meaning of the specification characters are as
follows:
a Do not preserve file access times. By default, file access times are preserved whenever
possible.
e Preserve everything, the user ID, group ID, file mode bits, file access time, and file
modification time. This is intended to be used by someone with all the appropriate
privileges in order to preserve all aspects of the files as they are recorded in the archive.
The e flag is the sum of the o and p flags.
m Do not preserve file modification times. By default, file modification times are preserved
whenever possible.
Old is a basic regular expression and new can contain an ampersand (&), n (where n is a digit)
back-references, or subexpression matching. The old string may also contain <newline>
characters. Any non-null character can be used as a delimiter (/ is shown here). Multiple -s
expressions can be specified. The expressions are applied in the order they are specified on the
command line, terminating with the first successful substitution. The optional trailing g continues
to apply the substitution expression to the path name substring which starts with the first
character following the end of the last successful substitution. The first unsuccessful substitution
stops the operation of the g option. The optional trailing p will cause the final result of a
successful substitution to be written to standard error in the following format:
<original path name> >> <new path name>
File or archive member names that substitute to the empty string are not selected and will be
skipped.
-t Reset the access times of any file or directory read or accessed by pax to be the same as they
were before being read or accessed by pax.
-u Ignore files that are older (having a less recent file modification time) than a pre-existing file or
archive member with the same name. During read, an archive member with the same name as a
file in the file system will be extracted if the archive member is newer than the file. During write,
a file system member with the same name as an archive member will be written to the archive if
it is newer than the archive member. During copy, the file in the destination hierarchy is replaced
by the file in the source hierarchy or by a link to the file in the source hierarchy if the file in the
source hierarchy is newer.
-v During a list operation, produce a verbose table of contents using the format of the ls utility with
the -l option. For path names representing a hard link to a previous member of the archive, the
output has the format: <ls -l listing> == <link name> For path names representing a symbolic
link, the output has the format: <ls -l listing> = ><link name> Where <ls -l listing> is the output
format specified by the ls utility when used with the -l option. Otherwise for all the other
operational modes ( read, write, and copy), path names are written and flushed to standard error
without a trailing newline as soon as processing begins on that file or archive member. The
trailing newline is not buffered, and is written only after the file has been read or written. If the
LC_TIME environment variable is set, the output time is formatted using the format specified by
the d_t_fmt keyword in the LC_TIME category of the specified locale.
-x Specify the output archive format, with the default format being ustar. pax currently supports the
following formats:
Qshell 109
cpio The extended cpio interchange format specified in the 1003.2 standard. The default
blocksize for this format is 5120 bytes.
bcpio The old binary cpio format. The default blocksize for this format is 5120 bytes. This
format is not very portable and should not be used when other formats are available.
sv4cpio
The System V release 4 cpio. The default blocksize for this format is 5120 bytes.
sv4crc The System V release 4 cpio with file crc checksums. The default blocksize for this format
is 5120 bytes.
tar The old BSD tar format as found in BSD4.3. The default blocksize for this format is 10240
bytes. Path names stored by this format must be 100 characters or less in length. Only
regular files, hard links, soft links, and directories will be archived (other file system
types are not supported). For backward compatibility with even older tar formats, a -o
option can be used when writing an archive to omit the storage of directories. This option
takes the form: -o -Cm -write_opt=nodir
ustar The extended tar interchange format specified in the 1003.2 standard. The default
blocksize for this format is 10240 bytes. Path names stored by this format must be 250
characters or less in length.
pax will detect and report any file that it is unable to store or extract as the result of any specific
archive format restrictions. The individual archive formats may impose additional restrictions on
use. Typical archive format restrictions include (but are not limited to): file path name length, file
size, link path name length and the type of the file.
-A Run pax as old tar.
-B Limit the number of bytes written to a single archive volume to bytes. The bytes limit can end
with m, k, or b to specify multiplication by 1048576 (1M), 1024 (1K) or 512. A pair of bytes limits
can be separated by x to indicate a product.
-C ccsid
Create the files extracted from the archive in the specified ccsid. There must be a valid translation
from CCSID 819 to the specified ccsid. This option overrides the value of the QIBM_CCSID
environment variable.
-D This option is the same as the -u option, except that the file inode change time is checked instead
of the file modification time. The file inode change time can be used to select files whose inode
information (for example, uid, gid, and so on) is newer than a copy of the file in the destination
directory.
-E Limit the number of consecutive read faults while trying to read a flawed archives. With a
positive limit, pax will attempt to recover from an archive read error and will continue processing
starting with the next file stored in the archive. A limit of 0 will cause pax to stop operation after
the first read error is detected on an archive volume. A limit of NONE will cause pax to attempt
to recover from read errors forever. The default limit is a small positive number of retries.
-G Select a file based on its group name, or when starting with a #, a numeric gid. A '' can be used
to escape the #. Multiple -G options may be supplied and checking stops with the first match.
-H Follow only command line symbolic links while performing a physical file system traversal.
-L Follow all symbolic links to perform a logical file system traversal.
-P Do not follow symbolic links, perform a physical file system traversal. This is the default mode.
where cc is the century, yy is the last two digits of the year, the first mm is the month (from 01 to
12), dd is the day of the month (from 01 to 31), hh is the hour of the day (from 00 to 23), the
second mm is the minute (from 00 to 59), and ss is the seconds (from 00 to 59). The minute field
mm is required, while the other fields are optional and must be added in the following order: hh,
dd, mm, yy, cc.
The ss field may be added independently of the other fields. Time ranges are relative to the
current time, so -T 1234/cm would select all files with a modification or inode change time of
12:34 p.m. today or later. Multiple -T time range can be supplied and checking stops with the first
match.
-U Select a file based on its user name, or when starting with a #, a numeric uid. A '' can be used to
escape the #. Multiple -U options may be supplied and checking stops with the first match.
-X When traversing the file hierarchy specified by a path name, do not descend into directories that
have a different device ID.
-Y This option is the same as the -D option, except that the inode change time is checked using the
path name created after all the file name modifications have completed.
-Z This option is the same as the -u option, except that the modification time is checked using the
path name created after all the file name modifications have completed.
The options that operate on the names of files or archive members (-c, -i, -n, -s, -u, -v, -D, -G, -T, -U, -Y,
and -Z) interact as follows.
v When extracting files during a read operation, archive members are selected based only on the user
specified pattern operands as modified by the -c, -n, -u, -D, -G, -T, -U options. Then any -s and -i
options will modify in that order, the names of these selected files. Then the -Y and -Z options will be
applied based on the final path name. Finally the -v option will write the names resulting from these
modifications.
v When archiving files during a write operation, or copying files during a copy operation, archive
members are selected based only on the user specified path names as modified by the -n, -u, -D, -G,
-T, and -U options (the -D option only applies during a copy operation). Then any -s and -i options
Qshell 111
will modify in that order, the names of these selected files. Then during a copy operation the -Y and
the -Z options will be applied based on the final path name. Finally the -v option will write the names
resulting from these modifications.
v When one or both of the -u or -D options are specified along with the -n option, a file is not
considered selected unless it is newer than the file to which it is compared.
Operands
The directory operand specifies a destination directory path name. If the directory operand does not exist,
or it is not writable by the user, or it is not of type directory, pax will exit with a non-zero exit status.
The pattern operand is used to select one or more path names of archive members. When the pattern
operand is not supplied, all members of the archive will be selected. When a pattern matches a directory,
the entire file hierarchy rooted at that directory will be selected. When a pattern operand does not select
at least one archive member, pax will write these pattern operands in a diagnostic message to standard
error and then exit with a non-zero exit status.
The file operand specifies the path name of a file to be copied or archived. When a file operand does not
select at least one archive member, pax will write these file operand path names in a diagnostic message
to standard error and then exit with a non-zero exit status.
Environment variables
Exit status
v 0 All files were processed successfully
v 1 An error occurred
Examples
1. Copy the contents of the current directory to an archive file:
pax -w -f saved.ar
2. Display the verbose table of contents for an archive file:
pax -r -v -f saved.ar
3. The following commands copy the entire directory tree anchored at /home/abbey/olddir to
/home/abbey/newdir:
mkdir /home/abbey/newdir
cd /home/abbey/olddir
pax -rw . /home/abbey/newdir
4. Interactively select the files to copy from the current directory to the directory destination:
pax -rw -i . destination
5. Extract all files from an archive file that are owned by user root and group bin and preserve all file
permissions:
pax -r -pe -U root -G bin -f saved.ar
pr - Print files
Synopsis
pr [+page] [-column] [-adFmrt] [-e [char][gap]] [-h header] [-i[char][gap]] [-l line] [-n[char][width]] [-o offset]
[-s[char]] [-w width] [-] [file ...]
Description
The pr utility is a printing and pagination filter for text files. When multiple input files are specified, each
is read, formatted, and written to standard output. By default, the input is separated into 66-line pages,
each with a 5-line header with the page number, date, time, and the path name of the file and a 5-line
trailer consisting of blank lines. If the LC_TIME environment variable is set, the date and time in the
header is formatted using the format specified by the d_t_fmt keyword in the LC_TIME category of the
specified locale.
When multiple column output is specified, text columns are of equal width. By default text columns are
separated by at least one <space>. Input lines that do not fit into a text column are truncated. Lines are
not truncated under single column output.
Error messages are written to standard error during the printing process (if output is redirected) or after
all successful file printing is complete (when printing to a terminal).
If pr receives an interrupt while printing to a terminal, it flushes all accumulated error messages to the
screen before terminating.
Options
Note:
1. In the following option descriptions, column, lines, offset, page, and width are positive decimal integers
and gap is a nonnegative decimal integer.
2. The -s option does not allow the option letter to be separated from its argument.
3. The -e, -i, and -n options require that both arguments, if present, not be separated from the option
letter.
+page Begin output at page number page of the formatted input.
-column
Produce output that is columns wide (default is 1) that is written vertically down each column in
the order in which the text is received from the input file. The options -e and -i are assumed. This
option should not be used with the -m option. When used with the -t option the minimum
number of lines is used to display the output.
-a Modify the effect of the column option so that the columns are filled across the page in a
round-robin order (for example, when column is 2, the first input line heads column 1, the second
heads column 2, the third is the second line in column 1, and so on). This option requires the use
of the column option.
-d Produce output that is double spaced. An extra <newline> character is output following every
<newline> found in the input.
Qshell 113
-e [char][gap]
Expand each input <tab> to the next greater column position specified by the formula n*gap+1,
where n is an integer > 0. If gap is zero or is omitted the default is 8. All <tab> characters in the
input are expanded into the appropriate number of <space>s . If any nondigit character, char, is
specified, it is used as the input tab character.
-F Use a <form-feed> character for new pages, instead of the default behavior that uses a sequence
of <newline> characters.
-h header
Use the string header to replace the file name in the header line.
-i [char][gap]
In output, replace multiple <space>s with <tab>s whenever two or more adjacent <space>s reach
column positions gap+1, 2*gap+1, and so on. If gap is zero or omitted, default <tab> settings at
every eighth column position is used. If any nondigit character, char, is specified, it is used as the
output <tab> character.
-l lines Override the 66 line default and reset the page length to lines. If lines is not greater than the sum
of both the header and trailer depths (in lines), the pr utility suppresses output of both the
header and trailer, as if the -t option were in effect.
-m Merge the contents of multiple files. One line from each file specified by a file operand is written
side by side into text columns of equal fixed widths, in terms of the number of column positions.
The number of text columns depends on the number of file operands successfully opened. The
maximum number of files merged depends on page width and the per process open file limit.
The options -e and i are assumed.
-n [char][width]
Provide width digit line numbering. The default for width, if not specified, is 5. The number
occupies the first width column positions of each text column or each line of -m output. If char
(any nondigit character) is given, it is appended to the line number to separate it from whatever
follows. The default for char is a <tab>. Line numbers longer than width columns are truncated.
-o offset
Each line of output is preceded by offset <spaces>s. If this option is not specified, the default is
zero. The space taken is in addition to the output line width.
-r Write no diagnostic reports on failure to open a file.
-s char Separate text columns by the single character char instead of by the appropriate number of
<space>s (default for char is the <tab> character).
-t Print neither the five-line identifying header nor the five-line trailer typically supplied for each
page. Quit printing after the last line of each file without spacing to the end of the page.
-w width
Set the width of the line to width column positions for multiple text-column output only. If this
option is not specified and the -s option is not specified, the default width is 72. If this option is
not specified and the -s option is specified, the default width is 512.
Operands
Each file is a path name of a file to be printed. If no file operands are specified, or if a file operand is -, the
standard input is used.
Environment variables
Exit status
v 0 on success
v >0 if an error occurs
Examples
1. Print a file starting at page 3:
pr +3 source.java
2. Print every *.java file and change the header message:
pr -h ’JDK source files and examples’ code/*.java
Related tasks:
“cat - Concatenate and print files” on page 80
“od - Dump files in various formats” on page 105
pwd
Description
You can use pwd to display the working directory on standard output.
Options
None.
Operands
None.
Exit status
v 0 when successful.
Related tasks:
“cd - Change working directory” on page 82
“pwdx - Print working directory expanded”
pwdx
Description
You can use pwdx to display the working directory with symbolic links expanded on standard output.
Exit status
Qshell 115
v 0 when successful
Related tasks:
“cd - Change working directory” on page 82
“pwd - Return working directory name” on page 115
Description
The Rfile utility reads i5/OS record files (database or device files) and writes the data to standard
output, or reads standard input and writes the data to record files.
Options
-a Append the contents of standard input to the record file. This option only applies when -w is
specified. If -w is specified without -a, any physical file member is cleared before writing the
contents of the stream.
-b Process binary data. This option prevents normal processing for newline characters in the input
or output stream. When -b is omitted, newline characters are removed from standard input lines
written to a record file, and newline characters are inserted at the end of records written to
standard output.
-c CL-command
Run a CL command in the utility process before processing any record file. This option can be
used to run a CL override command that specifies device-dependent parameters for a record file.
If more than one -c option is specified, the CL commands are processed in sequence before
processing any record file.
-C CL-command
Run a CL command in the utility process after processing all record files. If more than one -C
option is specified, the CL commands are processed in sequence after processing all record files.
-h Write a brief description of command syntax to standard error.
-K Keep the job log at job termination. The system normally deletes the job log after running a
QShell utility. This option forces the system to produce a job log listing (which may assist with
problem determination) when the job that runs Rfile ends.
-l Do not truncate long text lines. This option only applies to text data. When -l is specified, any
standard input line longer than one output record is folded onto as many records as necessary,
and no trailing blanks are removed from records written to standard output.
-q Suppress warning messages. This option suppresses messages normally written to standard error
when long text lines are truncated or folded in the output file.
-Q Use i5/OS qualified name syntax for file names. When this option is specified, the file names
specified as command operands are i5/OS qualified names (instead of Integrated File System
path names).
-r Read the specified record files and write their contents to standard output. Either -r or -w, but
not both, must be specified.
-s Process source sequence number and date fields as text. This option only applies to text
processing of FILETYPE(*SRC) record files. When -s is specified, the entire contents of every
Operands
At least one i5/OS record file name must be specified. If more than one file is specified, they are
processed in sequence as end of file is reached on each input source. When option -Q is omitted, files are
identified by path names in the Integrated File System. If option -Q is specified, file names are specified
in any of these forms:
file
library/file
’file(member)’
’library/file(member)’
If the library name is omitted or *LIBL is specified for the library name, the file is located using the job
library list. If the member name is omitted or *FIRST is specified as the member name, the first member
of a database file is opened. Specifying *LAST for the member name opens the last member of a database
file. Member name *ALL can be used with option -r to read all members of a database file (from first to
last). Member names are ignored for device files (when specified in i5/OS qualified name form).
Examples
1. Read the contents of source database member QSYSINC/H(SQLCLI), and write it to standard output.
Trailing blanks are removed from each line, as are the first 12 characters of each line (containing
sequence number and date information):
Rfile -rQ ’qsysinc/h(sqlcli)’
2. Write the contents of stream file mydoc.ps to spooled printer device file QPRINT as unconverted
ASCII data, and then use the CL LPR command to send the spool file to another system:
before=’ovrprtf qprint devtype(*userascii) spool(*yes)’
after="lpr file(qprint) system(usrchprt01) prtq(’rchdps’) transform(*no)"
cat -c mydoc.ps | Rfile -wbQ -c "$before" -C "$after" qprint
3. Copy the contents of save file INSAVF in library QGPL to another save file named OUTSAVF located
using the job library list. Note that the data is read and written in binary mode to avoid
ASCII/EBCDIC conversion and newline processing:
Rfile -rb /qsys.lib/qgpl.lib/insavf.file | Rfile -wbQ outsavf
Related tasks:
“catsplf - Concatenate and print spool files” on page 81
Description
The rm utility attempts to remove the non-directory type files specified on the command line. If the
permissions of the file do not permit writing, and the standard input device is a terminal, the user is
prompted (on standard error) for confirmation.
The rm utility removes symbolic links, not the files referenced by the links.
Qshell 117
It is an error to attempt to remove the files "." and "..".
Options
-d Attempt to remove directories as well as other types of files.
-f Attempt to remove the files without prompting for confirmation, regardless of the file's
permissions. If the file does not exist, do not display a diagnostic message or modify the exit
status to reflect an error. The -f option overrides any previous -i options.
-i Request confirmation before attempting to remove each file, regardless of the file's permissions, or
whether the standard input device is a terminal. If the response from the standard input begins
with the first character for the YES response in the current locale, the file is removed. The -i
option overrides any previous -f options.
-P Overwrite regular files before deleting them. Files are overwritten three times, first with the byte
pattern 0xff, then 0x00, and then 0xff again, before they are deleted.
-R Attempt to remove the file hierarchy rooted in each file argument. The -R option implies the -d
option. If the -i option is specified, the user is prompted for confirmation before each directory's
contents are processed (as well as before the attempt is made to remove the directory). If the user
does not respond affirmatively, the file hierarchy rooted in that directory is skipped.
-r Equivalent to -R.
Exit status
v 0 if all of the named files or file hierarchies were removed, or if the -f option was specified and all of
the existing files or file hierarchies were removed.
v >0 if an error occurs.
Examples
1. Remove all the files and the directory "java", as well as any subdirectories or files, or both, and do not
prompt for conformation.
rm -r -f /home/bob/examples/code/java
2. Remove the files "file1", "file2" and "file3".
rm file1 file2 file3
Related tasks:
“cp - Copy files” on page 89
“ln - Link files” on page 98
“ls - List directory contents” on page 99
“mv - Move files” on page 104
“rmdir - Remove directories”
Description
The rmdir utility removes the directory entry specified by each directory argument, provided it is empty.
Arguments are processed in the order given. In order to remove both a parent directory and a
subdirectory of that parent, the subdirectory must be specified first so the parent directory is empty when
rmdir tries to remove it.
Description
The setccsid utility sets the CCSID attribute for the specified files to the specified ccsid. The data
contained in file is not changed.
Options
-H If the -R option is specified, symbolic links on the command line are followed. Symbolic links
encountered in the tree traversal are not followed.
-L If the -R option is specified, both symbolic links on the command line and symbolic links
encountered in the tree traversal are followed.
-P If the -R option is specified, no symbolic links are followed.
-R If file designates a directory, setccsid sets the CCSID of each file in the entire subtree connected at
that point.
-h Set the CCSID of a symbolic link instead of the file pointed to by the symbolic link.
Operands
The ccsid is an integer number identifying the coded character set id. Each file is a pathname of a file to
set the CCSID.
Examples
Qshell 119
tail - Display the last part of a file
Synopsis
tail [-f | -r] [-b number | -c number | -k number |-n number] [file ...]
Description
The tail utility displays the contents of file or, by default, standard input, to the standard output.
The display begins at a byte, line, 512-byte block, or kilobyte location in the input. Numbers having a
leading plus sign (+) are relative to the beginning of the input, for example, "-c +2" starts the display at
the second byte of the input. Numbers having a leading minus sign (-) or no explicit sign are relative to
the end of the input, for example, "-n 2" displays the last two lines of the input. The default starting
location is "-n 10", or the last 10 lines of the input.
If more than one file is specified, each file is preceded by a header consisting of the string "==> XXX <=="
where XXX is the name of the file.
Note: tail does not support large files (files greater than 2GB in
size).
Options
-b number
The location is number 512-byte blocks.
-c number
The location is number bytes.
-f Causes tail to not stop when end of file is reached, but rather to wait for additional data to be
appended to the input. The -f option is ignored if the standard input is a pipe, but not if it is a
FIFO.
-k number
The location is number kilobytes.
-n number
The location is number lines.
-r Causes the input to be displayed in reverse order, by line. Additionally, this option changes the
meaning of the -b, -c and -n options. When the -r option is specified, these options specify the
number of bytes, lines or 512-byte blocks to display, instead of the bytes, lines or blocks from the
beginning or end of the input from which to begin the display. The default for the -r option is to
display all of the input.
Exit status
v 0 on success
v >0 if an error occurs
Examples
Display the last 100 lines from the file "donkeys". If the file "donkeys" is less than 100 lines, then tail
displays the entire file.
tail -n 100 donkeys
Related tasks:
“cat - Concatenate and print files” on page 80
“head - Copy the first part of files” on page 98
Description
The tar utility reads, writes, and lists files from an archive file.
Options
The following options select the function tar performs. One of these options must be specified.
-c Create a new archive.
-r Add the specified file to end of the achive.
-t List the names of the files in the archive to standard output.
-u Update the specified file in the archive if it has been modified since last written to the archive or
add file to the archive if it is not in the archive.
-x Extract the specified files from the archive. If no files are specified, all files are extracted from the
archive.
Operands
Qshell 121
Each file is an object that is either added to the archive or extracted from the archive depending on the
function.
Environment variables
Exit status
v 0 when successful
v >0 when unsuccessful
Related tasks:
“pax - Portable archive interchange” on page 106
touch [-acfm] [-r ref_file] [-t [[CC]YY]MMDDhhmm[.SS] ] [-C ccsid] file ...
Description
The touch utility sets the modification and access times of files to the current time of day. If the file
doesn't exist, it is created with default permissions.
Options
-a Change the access time of file. The modification time of the file is not changed unless the -m flag
is also specified.
-C ccsid
If file does not exist, create the file with the specified ccsid. This option overrides the value of the
QIBM_CCSID environment variable.
-c Do not create file if it does not exist. The touch utility does not treat this as an error. No error
messages are displayed and the exit value is not affected.
-f Attempt to force the update, even if the file permissions do not currently permit it.
-m Change the modification time of file. The access time of the file is not changed unless the -a flag
is also specified.
-r ref_file
Use the access and modifications times from the specified ref_file instead of the current time of
day.
-t Change the access and modification times to the specified time. The argument should be in the
form:
[[CC]YY]MMDDhhmm[.SS]
Environment variables
Exit status
v 0 on success
v >0 if an error occurs
Examples
1. Change the time-date stamp of the file myfile to match the time-date stamp of the file yourfile.
touch -r yourfile myfile
2. Change the time-date stamp of the file myfile to a specific time-date stamp.
touch -t 200001010000.00 myfile
Related tasks:
“attr - Get or set attributes for files” on page 75
“setccsid - Set CCSID attribute for file” on page 119
“umask - Get or set the file mode creation mask”
umask [ -S ] [ mask ]
Description
You can use umask to set or display the file creation mask. The mask allows you to control the file
permission bits that are set when creating a file or directory.
If you specify mask, qsh sets the file creation mask to mask. If you do not specify mask, qsh displays the
current file creation mask on standard output.
Options
v -S Use symbolic permissions.
Operands
When using symbolic permissions, mask is an expression that defines which permissions should not be
removed. A symbolic permission is an expression with the format [ who ] op [ permission ] where:
v who is a combination of the letters:
– u for owner permissions.
Qshell 123
– g for group permissions
– o for other (or public) permissions
– a for all permissions (the default value).
v op is one of the following:
– - (minus) to delete the permission.
– + (plus) to add the permission.
v permission is one or more of the following:
– r for read permission.
– w for write permission.
– x for execute or search permission.
Exit status
v 0 when successful.
v >0 when mask is invalid.
Examples
1. Display the current file creation mask in symbolic form: umask -S
2. Display the current file creation mask: umask
3. Set the file creation mask to remove read permission for others: umask 004
4. Set the file creation mask to remove write permission for group: umask -S g-w
Related tasks:
“chmod - Change file modes” on page 84
“cp - Copy files” on page 89
“mkdir - Make directories” on page 102
“mkfifo - Make FIFO special files” on page 103
“touch - Change file access and modification times” on page 122
“ulimit - Set or display resource limits” on page 176
Description
The uncompress utility restores the compressed files to their original form, renaming the files by deleting
the ".Z" extension.
If renaming file would cause files to be overwritten and the standard input device is a terminal, the user
is prompted (on standard error) for confirmation. If prompting is not possible or confirmation is not
received, the files are not overwritten.
Options
-b bits Specify the bits code limit (see below for details).
-c Uncompressed output is written to the standard output. No files are modified.
-v Print the percentage of expansion for each file.
Operands
Extended description
The uncompress utility uses a modified Lempel-Ziv algorithm. Common substrings in the file are first
replaced by 9-bit codes 257 and up. When code 512 is reached, the algorithm switches to 10-bit codes and
continues to use more bits until the limit specified by the -b flag is reached (the default is 16). Bits must
be between 9 and 16.
The amount of compression obtained depends on the size of the input, the number of bits per code, and
the distribution of common substrings. Typically, text such as source code or English is reduced by
50-60%.
Exit status
v 0 on success
v >0 if an error occurs.
Related tasks:
“compress - Compress data” on page 88
“zcat - Expand and concatenate data”
Description
The zcat utility expands the compressed data from the specified files and the uncompressed output is
written to standard output.
Operands
Exit status
v 0 on success
v >0 if an error occurs.
Related tasks:
“cat - Concatenate and print files” on page 80
“catsplf - Concatenate and print spool files” on page 81
“compress - Compress data” on page 88
“uncompress - Expand compressed data” on page 124
Qshell 125
Description
The dspmsg utility displays a message from a message catalog created by the GENCAT CL command.
The message is written to standard output. The dspmsg utility can be used as a replacement for echo or
print when a script needs to display messages that are translated to multiple languages.
Options
-n Display the specified message with no substitution.
-s set Retrieve the message from the specified set in the message catalog. The default value for set is 1.
Operands
The catalog operand specifies the path name to a message catalog. If the catalog is specified using a
relative path name, the NLSPATH variable and the LC_MESSAGES locale catagory are used to find the
catalog.
The msgid operand specifies the message identifier to retrieve from the message catalog.
When the specified catalog or msgid is not found, the optional defaultMsg is displayed instead. If the
defaultMsg operand is not specified, a system generated message is displayed.
The optional arguments are substituted into the output message if it contains the %s, %n$s, %ld, or %n$ld
printf() conversion specifications. Any other conversion specifications are not valid. Also, the normal
control character escapes (for example, \n) are supported.
Exit status
v 0 if successful
v >0 if an error occurred.
Examples
Description
You can use echo to display each arg on standard output separated by a space character and followed by
a newline character.
Operands
Description
You can use print to display each argument on standard output separated by a <space> character and
followed by a <newline> character.
Unless you specify -r or -R, print formats the output using the following conventions:
v \a Bell.
v \b Backspace.
v \c Print without adding newline character. The remaining arguments are ignored.
v \f Formfeed.
v \n Newline.
v \r Return.
v \t Tab.
v \v Vertical tab.
v \\ Backslash.
v \0x The character whose EBCDIC code is the 1, 2, or 3-digit octal number x.
Options
-n Do not add a trailing newline character to the output.
-r Do not use the conventions listed above.
-R Do not use the conventions listed above.
-u n Write output to descriptor n if specified or descriptor 1 by default. The descriptor must be 1, 2, or
one you opened with exec.
Operands
Exit status
v 0 when successful.
v >0 wnen unsuccessful.
Related concepts:
“exec - Run commands and open, close, or copy descriptors” on page 47
Qshell 127
Related tasks:
“dspmsg - Display message from message catalog” on page 125
“echo - Write arguments to standard output” on page 126
“printf - Write formatted output”
“read - Read a line from standard input” on page 129
Description
You can use printf to format and display output on standard output. The syntax is similar to the ILE C
printf() function. printf formats using the following conversion control string syntax:
%[flags][width].[precision]conversion
conversion specifies how the corresponding argument is displayed. You must specify one of the following
conversion characters:
c Unsigned character.
d Signed decimal number.
e,E Scientific notation.
f Floating point number.
g,G Scientific notation with significant digits.
i Signed decimal number.
o Unsigned octal number.
s String.
u Unsigned decimal number.
x Unsigned hexadecimal number with digits 0123456789abcdef.
X Unsigned hexadecimal number with digits 0123456789ABCDEF.
width is the minimum number of character positions displayed. Using an asterisk (*) character for the
width means the value of the next argument is the field width.
Options
None.
Operands
Exit status
v 0 when successful.
v >0 when unsuccessful.
Related tasks:
“dspmsg - Display message from message catalog” on page 125
“echo - Write arguments to standard output” on page 126
“print - Write output” on page 127
Description
You can use read to read a line and split it into fields using the characters from the IFS variable as
delimiters. By default, a backslash (\) at the end of a line causes the line to be continued on the next line.
qsh removes both the backslash and the <newline>.
Options
-p prompt
When the interactive option is set, display prompt on stderr.
-r A backslash at the end of a line does not mean continue the line.
-u n Read from descriptor n if specified or descriptor 0 by default. The descriptor must be 0 or one
that you opened with exec.
Operands
Each name is assigned to the corresponding field from the input line. Any leftover fields are assigned to
the last name. The default name is the REPLY variable.
Exit status
v 0 when successful.
v >0 when unsuccessful.
Examples
1. Read a line from stdin after displaying a prompt: read -p `Enter a name: ' firstname lastname
2. Read a line from descriptor 5: read -u5
Qshell 129
Related concepts:
“exec - Run commands and open, close, or copy descriptors” on page 47
Related tasks:
“dspmsg - Display message from message catalog” on page 125
“print - Write output” on page 127
ajar {-l | --list} [-v | --verbose] [-q | --quiet] jarfile [{file | pattern} ...] [{-x | -i} {file | pattern} ...] ...
ajar {-x | --extract} [-v | --verbose] [-q | --quiet] [-N | --neverWrite] [-p | --pipe] jarfile [{file | pattern} ...
] [{-x | -i} {file | pattern} ...] ...
ajar {-c | --create} [-0 | --store-only] [-v | --verbose] [-r | --recurse] [-@ | --stdin] [-D | --nodirs] [-q |
--quiet] [{-m | --manifest} mffile] [-M | --no-manifest] [{-n | --no-deflate} suffix..] jarfile file ... [{-x | -i}
{file | pattern} ...] ...
ajar {-a | --add} [-0 | --store-only] [-v | --verbose] [-r | --recurse] [-@ | --stdin] [-D | --nodirs] [-q |
--quiet] [{-m | --manifest} mffile] [-M | --no-manifest] [{-n | --no-deflate} suffix..] jarfile file ... [{-x | -i}
{file | pattern} ...] ...
ajar {-d | --delete} [-v | --verbose] [-q | --quiet] [{-m | --manifest} mffile] [-M | --no-manifest] jarfile {file
| pattern} ... [{-x | -i} {file | pattern} ...] ...
Description
ajar may be used as an alternative interface for creating and manipulating Javatm Archive (JAR) files. The
ajar utility combines several of the features found in zip/unzip tools with those of the IBM Developer Kit
for Java jar tool. Use ajar instead of the jar command when you need a zip or unzip like interface.
Like the jar tool, ajar lists the contents of jar files, extracts from jar files, creates new jar files and
supports many of the zip formats.. Additionally, ajar supports adding and deleting files in existing jars.
Actions
-h | --help
Writes command syntax to stdout.
-l | --list
Writes table of contents to stdout.
-x | --extract
Extracts files to the current directory.
-c | --create
Creates a new archive.
-a | --add
Adds new files to the archive and replaces existing files.
-d | --delete
Deletes files from the archive.
130 System i: Programming Qshell
Options
-@ | --stdin
Read file list from stdin. The file list consists of parameters that would normally follow the jarfile
parameter on the command line. The file list may consist of multiple lines with one item per line
and no leading blanks. Comments begin with '#' and extend to the end of the line.
-0 | --store-only
Store only. Do not compress/deflate files. Used when adding files and creating jars.
-m | --manifest
Include manifest information from the specified file.
-n | --no-deflate
Do not deflate files with the specified suffixes. The list of suffixes must be terminated by another
option or "--". See examples below.
-p | --pipe
Extract to stdout.
-q | --quiet
Quiet mode. Do not write informational and warning messages.
-r | --recurse
Recurse into directories. Used when adding files and creating jars.
-v | --verbose
Verbose mode. Write diagnostic information to stderr.
-D | --nodirs
Suppress directory entries. Used when adding files and creating jars.
-M | --no-manifest
Do not create a manifest.
-N | --neverWrite
Never overwrite any files when extracting.
Operands
The jarfile operand specifies the pathname of the jar file being operated on. jarfile must be an Integrated
File System (IFS) name.
The file operand specifies the pathname of a file or directory. file must be an IFS name.
The pattern operand specifies a pattern to match pathnames of files and directories. pattern will match to
IFS names. A pattern is a sequence of characters containing one or more of the following meta characters:
* matches 0 or more characters
? matches any single character
[...] matches any single character found within the brackets where "..." represents a set of characters.
Ranges are specified by a beginning character, a hyphen, and an ending character. A exclamation
('!') or carrot ('^') following the left bracket means the characters within the brackets are
complemented (match anything except the characters within the brackets).
Patterns must be contained within quotation marks or the meta characters must be preceded by a back
slash ('\') to prevent Qshell from interpreting them.
The file and pattern operands are used to select the files to be acted upon. Selected files are determined
using three sets of files, a candidate set, an exclusion set, and an inclusion set.
Qshell 131
candidate set
The candidate set is determined using the operands listed after jarfile and before any -x or -i. For
the list and extract actions the candidate set defaults to all files contained in the jar file. For all
other actions there is no default value for the candidate set.
exclusion set
The exclusion set is determined using all lists of file and pattern operands preceded by a -x and
followed by another -x, a -i or the end of the command string. The exclusion set defaults to the
empty set.
inclusion set
The inclusion set is determined using all lists of file and pattern operands preceded by a -i and
followed by another -i, a -x or the end of the command string. The inclusion set defaults to all
files in the candidate set.
All candidate files are selected that are in the inclusion set and not in the exclusion set.
Exit status
v 0 when all files were processed successfully
v >0 when an error occurred
Examples
1. To list all files in a jar file named myjar which is located in the current directory: ajar -l myjar
2. To list all .java files in myjar: ajar -l myjar \*.java
3. To extract all files from myjar into the current directory: ajar -x myjar
4. To create a jar named myjar containing all directories and files in the file system hierarchy rooted in
the current directory (Note in this example Qshell interprets the '*' and expands it so that the list of
candidate files contains all files and directories in the current directory.): ajar -c -r myjar *
5. To create a jar named myjar containing entries for only the files in the current directory: ajar -c -D
myjar *
6. To create the same jar file without a manifest (which is a zip file for all practical purposes): ajar -c -D
-M myjar *
7. To create a jar named myjar containing all files except .java files in the file system hierarchy rooted
in the current directory: ajar -c -r myjar * -x \*.java
8. To create a jar named myjar containing only the .class files in a file system hierarchy rooted in the
current directory: ajar -c -r myjar * -i \*.class
9. To create a jar named myjar without deflating the .java files: ajar -c -r -n java -- myjar *
10. To create a jar named myjar while reading the file list from stdin: ajar -@ -c -r myjar
Sample stdin data:
docs
source
classes
-x
docs/foo/*
11. To add a file named bar to a jar named myjar: ajar -a myjar bar
12. To delete a file named foo/bar from a jar named myjar: ajar -d myjar foo/bar
Note:
1. Short options can be clustered (for example, -c -v -D is the same as -cvD). Long options (--create,
--verbose, --nodirs, ..., and so on.) can be abbreviated as long as the abbreviations are unique.
2. File names can be changed when creating a jar or adding a file to a jar. For example, "ajar -c x.jar
bin/foo : bin/bar" creates the jar file x.jar from the file bin/foo with a single entry, bin/bar. This can
also be done using stdin, "ajar -c@ x.jar", where stdin contains:
Files in the integrated file system: The integrated file system stores Java-related class files, source files,
ZIP files, and JAR files in a hierarchical file structure. You can also store source files in the integrated file
system. You may store the files in these integrated file systems:
v "root" (/) file system
v open systems file system (QOpenSys)
v user-defined file system
v library file system (QSYS.LIB)
v OS/2 Warp Server for System i file system (QLANSrv)
v optical file system (QOPT)
Note: Other integrated file systems are not supported, because they are not thread safe.
Related concepts:
“jar - Archive Java files”
Qshell 133
Related information:
jarsigner tool
The IBM Developer Kit for Java ignores the following options of the java Qshell command:
The java Qshell command supports new options. These are the new supported options:
The Run Java (RUNJVA) command in the CL command reference documentation describes these new
options in detail. The CL command reference documentation for the Create Java Program (CRTJVAPGM)
command, Delete Java Program (DLTJVAPGM) command, and Display Java Program (DSPJVAPGM)
command contains information about managing Java programs.
The javah tool is available using the Qshell Interpreter. It reads a Java class file and creates a C-language
header file in the current working directory. The header file that is written is a Stream File (STMF). It
must be copied to a file member before it can be included in a C program on i5/OS.
The javah tool is compatible with the tool that is provided by Sun Microsystems, Inc. If the following
options are specified; however, the system ignores them:
Related information:
javah tool
Qshell 135
Applet packaging and applet signing is dependent on your browser. Check your browser documentation
to ensure that your browser is compatible with the Javatm JAR file format and javakey applet signing.
Note: The files that are created by the javakey tool contain
sensitive information. Appropriate Integrated File System
security measures protect the public and private key
files.
It is compatible with the javap tool that is supplied by Sun Microsystems, Inc. with a few exceptions:
Related information:
javap tool
Qshell 137
Utilities for managing jobs
Select this link to view the utilities for managing jobs.
Description
The getjobid utility writes the qualified job name and process ID for the specified process to standard
output. The qualified job name is a string in the form number/user/name. The number is a six-digit
decimal number, user is the user profile under which the job was started, and name is the name of job.
In the first synopsis form, the process is identified using the process ID. In the second synopsis form, the
process is identified using the qualified job name.
When the -v option is specified, getjobid displays the process ID, parent's process ID, process group,
current status, and qualified job name for the specified process.
Options
-c Display information about all of the current child processes of the specified process.
-j Processes are identified using the qualified job name.
-s Display a short form with just the qualified job name.
-v Display detailed information about the specified process, including the process ID, the parent's
process ID, process group, current status, and qualified job name.
Operands
Each pid is the decimal process ID of an active process on the system. When pid is not specified, getjobid
displays information for the current process.
Each qualified-job is the qualified job name of an active process on the system. The qualified job name is a
string in the form number/user/name. The number is a six-digit decimal number, user is the user profile
under which the job was started, and name is the name of job.
Exit status
v 0 when successful.
v >0 when an error occurred. The exit status is the number of processes for which information could not
be obtained.
Examples
1. Display the qualified job name of the current process.
getjobid
2. Display detailed information for three processes.
getjobid -v 318 942 1130
3. Display the short form of the qualified job name for one process.
hash -r
Description
The hash utility adds utility to the list of remembered utility locations or removes all remembered utilities
from the list. By default, hash uses a path search to find utility.
When no arguments are specified, hash reports the contents of the list. An entry that has not been looked
at since the last cd command is marked with an asterisk; it is possible for the entry to be invalid.
Options
-p filename
Do not use a path search to find utility. Use the specified filename as the location of utility.
-r Remove all previously remembered utility locations.
Operands
Exit status
v 0 when successful.
Related tasks:
“cd - Change working directory” on page 82
Description
You can use jobs to display information about active jobs started by qsh. For each job, qsh displays:
v Job number in brackets ([ ]).
v Status (Running, Done, Terminated, and so on).
v Return value of the job in parenthesis () when the return value is greater than zero and the job status is
Done.
v Command line for the job.
Options
-l Display status for each process in the specified job.
-n Display status only for those jobs whose status has changed but has not been reported yet.
Qshell 139
Operands
Exit status
v 0 when successful.
v >0 when unsuccessful.
Examples
1. Display status for job number 1: jobs %1
2. Display status for process id 16107: jobs 16107
3. Display status for a job running the ls utility: jobs %ls
4. Display status for all active jobs: jobs
Related tasks:
“getjobid - Display job information” on page 138
“kill - Terminate or signal processes”
“wait - Wait for process completion” on page 146
“ps - Display process status” on page 142
Description
You can use kill to send a signal to the specified jobs. You can specify a signal using:
v signame - A signal name.
v signum - A signal number.
v sig - Either a signal name or signal number with no space after the minus (-).
Options
-l List signal names. If there are no arguments, qsh displays all of the signal names. If signal is a
name, qsh displays the corresponding signal number. If signal is a number, qsh displays the
corresponding signal name.
Operands
Exit status
v 0 when successful.
v >0 when unsuccessful. If the -l option was not specified, the exit status is the number of jobs to which
qsh could not send the signal.
Examples
1. Send the USR1 signal to process id 16711: kill -s USR1 16711
2. Send the USR1 signal to job 1: kill -n 7 %1
3. List the valid signal names: kill -l
Related tasks:
“jobs - Display status of jobs in current session” on page 139
“trap - Trap signals” on page 145
“wait - Wait for process completion” on page 146
Description
You can use liblist to add or delete a library from the user portion of the library list, set the current
library, or display the library list for the current job.
You can add libraries to the user portion of the library list by specifying the -a option and a list of
libraries. By default, the libraries are added to user portion of the beginning of the library list.
You can remove libraries from the user portion of the library list by specifying the -d option and a list of
libraries.
The current library is set to library when the -c option is specified. The current library can be unset by
specifying both the -c and -d options.
When no arguments are specified, qsh displays the current library list. Each line in the output includes
the library name and the type of the library. A library can be one of the following types:
v SYS for a library in the system portion of the library list.
v PRD for a library in the product portion of the library list.
v CUR for the current library.
v USR for a library in the user portion of the library list.
Options
Qshell 141
-a Add library to the user portion of the library list.
-c Set the current library to library.
-d Remove library from the user portion of the library list or unset the current library if the -c option
is also specified.
-f When the -a option is specified, add library to the beginning of the user portion of the library list.
-l When the -a option is specified, add library to the end of the user portion of the library list.
Operands
Each library is a library to either add or delete from the user portion of the library list depending on the
options specified.
Exit status
v 0 when successful.
v >0 when unsuccessful.
Examples
1. Add the library MYLIB to the library list: liblist -a MYLIB
2. Remove the library MYLIB from the library list: liblist -d MYLIB
3. Set the current library to MYLIB: liblist -c MYLIB
4. Unset the current library: liblist -cd
5. Display the library list: liblist
Description
The ps utility displays information about processes. The output from ps can include the following fields:
CGROUP
The current primary group profile of the process.
CMD Program, menu, or command most recently run by the process.
CUSER
The current user profile of the process.
DEVICE
Name of the device description object that is associated with the process.
ETIME
The elapsed time since the process started. The time is displayed in the format [[dd-]hh:]mm:ss
where dd is the number of days, hh is the number of hours, mm is the number of minutes, and ss
is the number of seconds.
FUNCTION
Program, menu, or command most recently run by the process.
JOBID Qualified job name of the process. The qualified job name is a string in the form
number/user/name. The number is a six-digit decimal number, user is the user profile under which
the job was started, and name is the name of job.
By default, ps displays the PID, DEVICE, TIME, FUNCTION, STATUS, and JOBID fields about processes
owned by the current user. Use the -o option to select the fields displayed by ps.
To display information about other processes, you must have *JOBCTL special authority.
Options
-a Display information for all processes associated with a 5250 terminal.
-A Display information for all processes. This includes processes that are active, on a job queue, or
on an output queue.
-e Include active processes in the output.
-f Display a full listing. The output includes the USER, PID, PPID, STIME, DEVICE, TIME and
FUNCTION fields.
-j Include processes on a job queue in the output.
Qshell 143
-l Display a long listing. The output includes the USER, PID, PPID, PRI, STATUS, JOBID, STIME,
DEVICE, TIME and FUNCTION fields.
-o format
Display information according to the format specification given in format. Multiple -o options can
be specified.
-p pidlist
Write information for processes whose process ID numbers are specified in pidlist. The pidlist
must be a single argument in the form of a blank- or comma-separated list.
-s sbslist
Write information for processes running in the subsystems specified in sbslist. The sbslist must be
a single argument in the form of a blank- or comma-separated list.
-t Include processes on an out queue in the output.
-u userlist
Write information for processes whose user ID numbers or user names are specified in userlist.
The userlist must be a single argument in the form of a blank- or comma-separated list.
Environment Variables
Exit status
v 0 when successful
v >0 when unsuccessful
Related tasks:
“getjobid - Display job information” on page 138
“jobs - Display status of jobs in current session” on page 139
sleep time
Description
You can use sleep to suspend a process from running for time seconds.
Options
None.
Operands
Exit status
v 0 when successful.
trap -l
Description
The trap utility sets the action for qsh to take when a condition arises. qsh expands action once when
running trap and again when condition arises.
When the -p option is specified, trap displays the current action for the specified conditions.
When the -l option is specified, trap displays a list of all of the signal names and their corresponding
numbers.
When no arguments are specified, trap displays a list of the currently defined traps.
Options
-l Display a list of all of the signal names and their corresponding numbers.
-p Display each trap in a re-enterable format.
Operands
If more than one condition arises at the same time, qsh runs the traps in this order:
1. DEBUG, if it is specified, then
2. ERR, if it is specified and applicable, then
3. Any other specified traps in signal number order, then
4. EXIT.
Exit status
v 0 when successful.
v >0 when an invalid condition is specified.
Examples
Qshell 145
1. Set a trap for the ERR condition:
trap `print Command failed’ ERR
2. Ignore the ERR condition:
trap "" ERR
3. Reset the ERR condition to its original value:
trap - ERR
4. Display the current action for the ERR condition:
trap -p ERR
5. Display all of the currently defined traps:
trap
Related tasks:
“kill - Terminate or signal processes” on page 140
“wait - Wait for process completion”
Description
You can use wait to wait for the specified jobs to end. If job is not specified, qsh waits for all child
processes to end.
Options
None.
Operands
Exit status
When at least one job was specified, the exit status is the exit status of the last job.
Examples
1. Wait for process id 16825 to end: wait 16825
2. Wait for job number 5 to end: wait %5
Related tasks:
“jobs - Display status of jobs in current session” on page 139
“kill - Terminate or signal processes” on page 140
“trap - Trap signals” on page 145
declare
Description
The declare utility declares variables, assigns values to variables, sets or unsets attributes for variables,
and displays the definitions for shell functions. If used in a shell function, declare makes the variable
name local to the function.
In the first synopsis form, declare declares a variable name and optionally assigns it the specified value. If
an option is specified, the corresponding attribute is turned on for the variable.
In the second synopsis form, declare declares a variable name and optionally assigns it the specified value.
If an option is specified, the corresponding attribute is turned off for the variable.
In the third synopsis form, declare displays the names and definitions for all shell functions if no names
are specified or the shell functions specified by name.
Qshell 147
In the fourth synopsis form, declare displays the attributes and value of the variables specified by name
in a re-enterable format.
In the fifth synopsis form, declare displays the names and values of all variables.
Options
-E Set the floating point attribute for the variable. On assignments to the variable the value is
evaluated as a floating point number.
-f Display the names and definitions of shell functions.
-F Display the names of shell functions.
-i Set the integer attribute for the variable. On assignments to the variable the value is evaluated as
an integer number.
-l Set the lowercase attribute for the variable. On assignments to the variable the value is set to
lowercase characters.
-p Display each variable in a re-enterable format.
-r Set the read-only attribute for the variable. The variable cannot have its value changed by a
subsequent assignment and cannot be unset. If a value is also specified, the value of the variable
is updated before setting the read-only attribute.
-u Set the uppercase attribute for the variable. On assignments to the variable the value is set to
uppercase characters.
-x Set the export attribute for the variable. The variable is automatically placed in the environment
of subsequently executed commands.
Operands
Exit status
v 0 when successful
v >0 when unsuccessful
Related concepts:
“Compound commands” on page 23
Compound commands provide control flow for other commands. Each compound command starts with a
reserved word and has a corresponding reserved word at the end.
“Variables” on page 8
When it is started, qsh initializes shell variables from the defined environment variables. A variable is
used to store data. .
Related tasks:
“export - Set export attribute for variables” on page 149
“let - Evaluate arithmetic expression” on page 157
“local - Assign a local variable in a function” on page 149
“readonly - Set read-only attribute for variables” on page 151
“set - Set or unset options and positional parameters” on page 151
“typeset - Declare variables and set attributes” on page 154
“unset - Unset values of variables and functions” on page 154
Description
You can use export to set the export attribute for the variables specified by name. A variable with the
export attribute is automatically placed in the environment of subsequently executed commands.
When no arguments are specified, qsh displays a list of all the variables with the export attribute and
their values.
Options
-p Precede each line of the output with the word "export " so it is displayed in a re-enterable format.
-s Also set the variable as an environment variable in the current process.
Operands
Each name specifies a variable in the current environment. If a value is also specified, the value of the
variable is updated.
Exit status
v 0 when successful.
Examples
1. Set the export attribute for an existing variable:
export ALPHA
2. Set the value and export attribute of a new variable:
export ALPHA=one
3. List all variables with the export attribute:
export
Related tasks:
“declare - Declare variables and set attributes” on page 147
“local - Assign a local variable in a function”
“readonly - Set read-only attribute for variables” on page 151
“set - Set or unset options and positional parameters” on page 151
“unset - Unset values of variables and functions” on page 154
“printenv - Display values of environment variables” on page 150
“typeset - Declare variables and set attributes” on page 154
Description
You can use local to make a variable local to a function. When a variable is made local, it inherits the
initial value and exported and read-only attributes from the variable with the same name in the
surrounding scope, if there is one. Otherwise, the variable is initially unset.
Qshell 149
qsh uses dynamic scoping, so that if you make the variable alpha local to function foo, which then calls
function bar, references to the variable alpha made inside bar will refer to the variable declared inside foo,
not to the global variable named alpha.
The special parameter - is the only special parameter that can be made local . By making - local, any shell
options that are changed with set inside the function are restored to their original values when the
function returns.
Options
None.
Operands
Each name specifies a variable in the current environment. If a value is also specified, the value of the
variable is updated.
Exit status
v 0 when successful.
v >0 when called from outside of a function.
Related tasks:
“declare - Declare variables and set attributes” on page 147
“export - Set export attribute for variables” on page 149
“readonly - Set read-only attribute for variables” on page 151
“set - Set or unset options and positional parameters” on page 151
“typeset - Declare variables and set attributes” on page 154
“unset - Unset values of variables and functions” on page 154
printenv [ -s ] [ name ]
Description
The printenv utility displays the value of the environment variable name. If no name is specified, printenv
displays all of the current environment variables, one per line, in the format "name=value". By default,
printenv displays job environment variables.
Options
-s Display system environment variables.
Operands
The name is the name of an environment variable in the current environment or a system environment
variable.
Exit status
v 0 when successful
v >0 if name is not currently defined
Related tasks:
“export - Set export attribute for variables” on page 149
Description
You can use readonly to set the read-only attribute for the variables specified by name. A variable with
the read-only attribute cannot have its value changed by a subsequent assignment and cannot be unset.
Note that qsh can change the value of a variable with the read-only attribute. For example, if PWD has
the read-only attribute, it's value will be changed when you change the current working directory.
When no arguments are specified, qsh displays a list of the variables with the read-only attribute and
their values.
Options
-p Precede each line of the output with the word "readonly " so it is displayed in a re-enterable
format.
Operands
Each name specifies a variable in the current environment. If a value is also specified, the value of the
variable is updated before setting the read-only attribute.
Exit status
v 0 when successful.
v >0 when unsuccessful.
Examples
1. Set the read-only attribute for an existing variable:
readonly ALPHA
2. Set the value and read-only attribute of a new variable:
readonly ALPHA=one
3. List all variables with the read-only attribute:
readonly
Related tasks:
“declare - Declare variables and set attributes” on page 147
“export - Set export attribute for variables” on page 149
“local - Assign a local variable in a function” on page 149
“set - Set or unset options and positional parameters”
“typeset - Declare variables and set attributes” on page 154
“unset - Unset values of variables and functions” on page 154
Qshell 151
Description
Options
All of the single letter options have a corresponding -o option. The option value is listed in parenthesis
following the letter option below. qsh supports the following options:
-a (allexport)
Set the export attribute to each variable that is assigned a value.
-b (notify)
Enable asynchronous notification of background job completion.
-C (noclobber)
Do not overwrite existing files with the > redirection operator.
-e (errexit)
If the interactive option is not set, exit immediately if any untested command fails. The exit status
of a command is considered to be explicitly tested if the command is used to control an if, elif,
while, or until; or if the command is the left hand operand of an && or || operator.
-f (noglob)
Disable path name expansion.
-F (float)
Enable floating point arithmetic in arithmetic expressions.
-j (jobtrace)
Enable job tracing. Each time qsh starts a i5/OS job, it displays a message to standard error with
the fully-qualified job name and process id.
-l (logcmds)
Enable command logging. Write each command to a message in the job log before it is run.
-m (monitor)
Display a message when a job completes. qsh implicitly turns on this option when the interactive
option is set.
-n (noexec)
If the interactive option is not set, read commands but do not run them. This is useful for
checking the syntax of shell scripts.
-t (trace)
Enable internal tracing. qsh traces internal information to the file specified by TRACEFILE
variable or the qsh_trace file in the user's home directory.
-u (nounset)
Write a message to standard error when attempting to expand a variable that is not set, and if the
interactive option is not set exit immediately.
-v (verbose)
Write input to standard error as it is read.
Operands
Exit status
v 0 when successful.
Examples
1. List all variables and their values:
set
2. List all option settings:
set -o
3. Set positional parameters $1, $2, $3:
set alpha beta gamma
4. Set the allexport and notify options:
set -o allexport -o notify
5. Set the verbose and xtrace options:
set -xv
6. Unset the xtrace option:
set +x
7. Unset the notify option:
set +o notify
8. Unset all positional parameters:
set --
Related tasks:
“declare - Declare variables and set attributes” on page 147
“export - Set export attribute for variables” on page 149
“local - Assign a local variable in a function” on page 149
“readonly - Set read-only attribute for variables” on page 151
“qsh - Qshell command language interpreter” on page 49
“shift - Shift positional parameters”
“typeset - Declare variables and set attributes” on page 154
“unset - Unset values of variables and functions” on page 154
shift [ n ]
Description
You can use shift to shift the positional parameters to the left by n. Positional parameter 1 is assigned the
value of positional parameter (1+n), positional parameter 2 is assigned the value of positional parameter
(2+n), and so forth. The special parameter # is updated with the new number of positional parameters.
Options
Qshell 153
None.
Operands
The value of n must be an unsigned integer less than or equal to the special parameter #. If n is not
specified, the default value is 1. If n is 0, there are no changes to the positional parameters.
Exit status
v 0 when successful.
v >0 when n is invalid.
Examples
typeset
Description
The typeset utility declares variables, assigns values to variables, sets attributes for variables, and
displays the definitions for shell functions. It is a synonym for the declare utility.
Related tasks:
“declare - Declare variables and set attributes” on page 147
“export - Set export attribute for variables” on page 149
“local - Assign a local variable in a function” on page 149
“readonly - Set read-only attribute for variables” on page 151
“set - Set or unset options and positional parameters” on page 151
“unset - Unset values of variables and functions”
Description
You can use unset to unset each variable or function specified by name. If no option is specified, name
refers to a variable. Variables with the read-only attribute cannot be unset.
Options
Operands
Exit status
v 0 when successful.
v >0 when at least one name could not be found. The value is the number of names that are not found.
Examples
1. Unset the variable alpha: unset alpha
2. Unset the function foo: unset -f foo
Related tasks:
“declare - Declare variables and set attributes” on page 147
“export - Set export attribute for variables” on page 149
“local - Assign a local variable in a function” on page 149
“readonly - Set read-only attribute for variables” on page 151
“set - Set or unset options and positional parameters” on page 151
“typeset - Declare variables and set attributes” on page 154
break[ n ]
Description
You can use break to exit from the smallest enclosing for, while, or until loop or from the nth enclosing
loop. Processing resumes with the command immediately following the loop.
Options
None.
Operands
Exit status
v 0 when successful.
Related tasks:
“continue - Continue for, while, or until loop” on page 156
: [ argument ... ]
Qshell 155
Description
You can use colon where you must have a command, but you do not want the command to do anything.
For example, in the then condition of an if command.
Options
None.
Operands
Exit status
v 0 when successful.
continue [ n ]
Description
You can use continue to go to the top of the smallest enclosing for, while, or until loop or to the nth
enclosing loop. Processing resumes with the first command at the top of the loop.
Options
None.
Operands
Exit status
v 0 when successful.
Related tasks:
“break - Exit from for, while, or until loop” on page 155
false
Description
Options
None.
Operands
None.
Description
You can use getopts to check the positional parameters for legal options. An option argument begins with
a minus (-). The end of the the options is marked by the first argument that does not begin with a minus
or an argument of --.
Each time you call getopts, it places the next option letter it finds in varname. qsh stores the index of the
next parameter to be processed in the variable OPTIND. When an option requires an argument, qsh
stores the argument in the variable OPTARG.
Options
None.
Operands
The option letters recognized by getopts are identified in optstring. If a letter is followed by a colon (:),
that option is expected to have an argument. The argument can be separated from the option letter by
<space>s.
With each call to getopts, varname is updated with the option letter.
Exit status
v 0 when successful.
v >0 when unsuccessful.
Description
You can use let to evaluate each arg as an arithmetic expression. You may need to quote each arg since
many arithmetic operators have a special meaning to qsh.
Operands
Exit status
v 0 when the value of the last expression is non-zero
v 1 when the value of the last expression is zero
Qshell 157
Examples
return [ n ]
Description
You can use return to cause a function or dot script to return to the invoking shell script. If return is
called outside a function or dot script, it is equivalent to exit.
Options
None.
Operands
The value of n is an integer that is greater than or equal to 0 and less than or equal to 255.
Exit status
test expression
[ expression ]
Description
The test utility checks the type of a file, checks permissions on files, compares two strings, or compares
two arithmetic expressions.
The test utility tests conditions for files using the following primaries:
-b file True if file exists and is a block special file.
-c file True if file exists and is a character special file.
-d file True if file exists and is a directory.
-e file True if file exists regardless of type.
-f file True if file exists and is a regular file.
-g file True if file exists and its set group id flag is set.
-G file True if file exists and is owned by the effective group id.
The test utility tests conditions for checking status using the following primaries:
-o optname
True if shell option optname is enabled.
-t fd True if file descriptor fd is open and associated with a terminal.
The test utility tests conditions for comparing strings using the following primaries:
-n string
True if the length of string is non-zero.
-z string
True if the length of string is zero.
string True if string is not the null string.
string1 = string2
True if the strings are identical.
string1 == string2
True if the strings are identical.
string1 != string2
True if the strings are not identical.
string1 < string2
True if string1 sorts before string2 in the collation sequence of the current locale.
string1 > string2
True if string1 sorts after string2 in the collation sequence of the current locale.
The test utility tests conditions for comparing arithmetic expressions using the following primaries:
Qshell 159
exp1 -eq exp2
True if the arithmetic expressions are equal.
exp1 -ne exp2
True if the arithmetic expressions are not equal.
exp1 -gt exp2
True if the first arithmetic expression is greater than the second arithmetic expression.
exp1 -ge exp2
True if the first arithmetic expression is greater than or equal to the second arithmetic expression.
exp1 -lt exp2
True if the first arithmetic expression is less than the second arithmetic expression.
exp1 -le exp2
True if the first arithmetic expression is less than or equal to the second arithmetic expression.
The above primaries can be combined to form complex expressions using the following operators:
v ! expr True if expr is false.
v expr1 -a expr2 True if both expressions are true.
v expr1 & expr2 True if both expressions are true.
v expr1 && expr2 True if both expressions are true.
v expr1 -o expr2 True if either expression is true.
v expr1 | expr2 True if either expression is true.
v expr1 || expr2 True if either expression is true.
v (expr) Parentheses are for grouping.
The -a, &, and && operators have higher precedence than the -o, | operators, and || operators.
Options
See above.
Operands
Exit status
v 0 when expression is true.
v 1 when expression is false.
v >1 when there is an error.
Examples
1. See if /home is a directory:
test -d /home
2. See if one integer is less than or equal to another:
test "$index" -le "$count"
3. See if two strings are equal:
test "$REPLY" = "Yes"
true
160 System i: Programming Qshell
Description
Options
None.
Operands
None.
Exit status
Zero.
Related tasks:
“false - Return false value” on page 156
Miscellaneous utilities
View miscellaneous utilities.
clrtmp [-c]
Description
The clrtmp utility clears the /tmp directory by removing all of the objects from it. On other systems, the
/tmp directory is cleared each time the system is started. On i5/OS, the /tmp directory is not cleared
when the system is started. You can include a call to the clrtmp utility from the startup program specified
by the QSTRUPPGM system value to have the /tmp directory cleared when i5/OS is started.
To remove objects from the /tmp directory the caller of clrtmp must have *WX authority to each
subdirectory contained in /tmp and *OBJEXIST authority to each object. If the caller does not have the
required authority those objects are not removed from the /tmp directory.
Unpredictable results may occur if clrtmp is called while the system is running. For example, if another
program is writing to a file in the /tmp directory, the path to the file is removed and you will not be able
use the file.
Options
-c Create /tmp if it does not exist.
Exit status
v 0 when successful
v >0 when an error occurs or at least one object could not be removed from the /tmp directory
Qshell 161
dataq - Send or receive messages from i5/OS data queue
Synopsis
Description
The dataq utility clears messages from a data queue, reads messages from a data queue, or writes
messages to a data queue.
In the first synopsis form, dataq clears all of the messages from the queue.
In the second synopsis form, dataq reads messages from the queue and writes them to standard output.
By default, it reads one message from the queue. If no messages are available from the queue, dataq waits
for a message.
In the third synopsis form, dataq writes messages to the queue. If data is specified, it is written as one
message to the queue. Otherwise, each line read from standard input is written as a message to the queue.
Options
-c Clear all of the messages from the queue.
-l When a relative path name is specified, use the library list to find the queue.
-n number
If the -r option is specified, read number messages from the queue. If the -w option is specified,
write number messages to the queue.
-p Peek mode. When reading messages, the messages are left on the queue.
-r Read messages from the queue.
-t seconds
When reading messages, exit if no messages have been received after seconds seconds of waiting.
-w Write messages from the queue.
Operands
The queue is the path name to a data queue. A data queue can only exist in the QSYS.LIB file system.
Exit status
v 0 when successful
v >0 when unsuccessful
Related tasks:
“datarea - Read or write i5/OS(TM) data area”
“Rfile - Read or write record files” on page 116
Description
In the first synopsis form, datarea reads the contents of the data-area and writes it to standard output. By
default, it reads the entire data area.
In the second synopsis form, datarea writes to the data-area. If data is specified, it is written to the
data-area. Otherwise, one line is read from standard input and written to the data-area.
Options
-l When a relative path name is specified, use the library list to find the data-area.
-r Read from the data-area.
-s substring
For a character type data area, read or write the character positions specified by substring. The
substring is specified as a number range that consists of a number, a dash (-), and a second
number to select the character positions from the first number to the second number, inclusive. If
the first number is omitted, character positions from 1 to the second number are selected. If the
second number is omitted, character positions from the first number to the end of the data area
are selected.
-w Write to the data-area.
Operands
The data-area is the path name to a data area. A data area can only exist in the QSYS.LIB file system.
Exit status
v 0 when successful
v >0 when unsuccessful
Related concepts:
“dataq - Send or receive messages from i5/OS data queue” on page 162
Related tasks:
“Rfile - Read or write record files” on page 116
Description
The date utility writes the date and time to standard output. By default, the current date and time are
written.
Options
-u Give time in universal coordinated time (UTC). The QUTCOFFSET system value must be set
correctly for date to return the correct time.
Operands
Qshell 163
The +format operand specifies the format of the output from the date command. Each field descriptor is
replaced in the standard output by its corresponding value. All other characters are copied to the output
without change. The output is always terminated with a newline character.
Exit status
v 0 when successful
v >0 when an error occurred
Examples
1. Print the full weekday name, the full month name, the day and the full year.
date +@(#) 89 1.41@(#), 0 %d%, %Y
Friday, August 14, 1998
2. Print the day, the abbreviated month name, and the abbreviated year.
date +%d%.%b%.%y
14.Aug.98
3. Print the numeric month, day, and abbreviated year.
date +%m%/%d%/%y
08/14/98
Description
The expr utility evaluates an expression formed by the operands and writes the result to standard output.
Operands
The format of the expression to evaluate is shown as follows. expr, expr1, and expr2 can be decimal
integers or strings.
Expression Description
expr1 | expr2 Returns the evaluation of expr1 if it is neither null nor
zero; otherwise, returns the evaluation of expr2.
expr1 & expr2 Returns the evaluation of expr1 if neither expression
evaluates to null or zero; otherwise, returns zero.
expr1 = expr2 Equal.
expr1 > expr2 Greater than.
expr1 >= expr2 Greater than or equal.
expr1 < expr2 Less than.
expr1 <= expr2 Less than or equal.
expr1 != expr2 Not equal.
expr1 + expr2 Addition of decimal integers.
expr1 - expr2 Subtraction of decimal integers.
expr1 * expr2 Multiplication of decimal integers.
expr1 / expr2 Division of decimal integers.
expr1 % expr2 Remainder of decimal integer division.
expr1 : expr2 Matching expression.
( expr ) Grouping symbols.
Exit status
v 0 when the expression evaluates to neither null nor zero.
v 1 when the expression evaluates to null or zero.
v 2 when the expression is invalid.
v >2 when an error occurred.
Examples
1. Evaluate an arithmetic expression.
expr 10+10*10/10-10
Qshell 165
2. Evaluate a true or false condition.
expr 10 = 10
hostname [-is]
Description
The hostname utility writes the name of the current host system to standard output.
Options
-i Also display the IP address of the host system.
-s Display the short name of the host system without the domain information.
Exit status
v 0 when successful
v >0 when an error occurs
id [user]
id -G [-n] [user]
id -g [-nr] [user]
id -p [user]
id -u [-nr] [user]
Description
The id utility displays the user and group names and numeric identifiers, of the calling process, to
standard output. If the real and effective identifiers are different, both are displayed, otherwise only the
real identifier is displayed.
If a user (login name or user identifier) is specified, the user and group identifiers of that user are
displayed. In this case, the real and effective identifiers are assumed to be the same.
Options
-G Display the different group identifiers (effective, real and supplementary) as white-space
separated numbers, in no particular order.
-g Display the effective group identifier as a number.
-n Display the name of the user or group identifier for the -G, -g and -u options instead of the
number. If any of the identifier numbers cannot be mapped into names, the number will be
displayed as usual.
-p Make the output human-readable. The user identifier as a name is displayed, preceded by the
keyword "uid". If the effective user identifier is different from the real user identifier, the real user
identifier is displayed as a name, preceded by the keyword "euid". If the effective group identifier
Exit status
v 0 on success
v >0 if an error occurs.
Examples
Display all user and groups identifiers that belong to the user "SAM".
id -p SAM
uid SAM
groups 500, 1
Related tasks:
“logname - Display user's login name” on page 175
ipcrm [-m shmid] [-M shmkey] [-q msgid] [-Q msgkey] [-s semid] [-S semkey]
Description
The ipcrm utility removes an interprocess communication (IPC) entry if the caller has the necessary
authority to the IPC entry. The caller can specify an entry either by the key or by the identifier. The caller
can remove multiple entries at once.
Options
-M shmkey
Remove the shared memory segment with the specified key.
-m shmid
Remove the shared memory segment with the specified id.
-Q msgkey
Remove the message queue with the specified key.
-q msgid
Remove the message queue with the specified id.
-S semKey
Remove the semaphore set with the specified key.
-s semid
Remove the semaphore set with the specified id.
Operands
Exit status
v 0 on success
v >0 if an error occurs
Qshell 167
Examples
v Remove a semaphore with key 1283 and a message queue with id 10:
ipcrm -S 1283 -q 10
Related tasks:
“ipcs - Report interprocess communication status”
ipcs [-ETabcjmnopqstu]
Description
The ipcs utility reports information about existing interprocess communication (IPC) entries on the
system and displays the output on standard output. The ipcs utility is shipped with public authority set
to *EXCLUDE. The user must have *SERVICE special authority to run ipcs.
ipcs automatically reports some information for all entries that match the IPC mechanism specified.
Additional information is reported based on the specified options.
If no IPC mechanism is specified, all five mechanisms are reported. An IPC mechanism is specified by
using the -m option for shared memory, -n option of named semaphores, -s option for semaphores sets,
-q option for message queues, or -u option for unnamed sempahores.
The following information is reported for every shared memory, semaphore set, and message queue
entry:
v The type of the mechanism (column T).
v The id of the entry in decimal form (column ID).
v The key of the entry in hexadecimal form (column KEY).
v The entry's access modes and flags (column MODE).
v The user profile of the owner of the entry (column OWNER).
v The group profile of the owner of the entry (column GROUP).
Warning: Running ipcs locks system-scoped resources that can affect the performance of other IPC
operations.
Options
The following options are used to select the IPC mechanism to report on.
-m Show the shared memory entries on the system.
-n Show the named semaphore entries on the system.
-q Show the message queue entries on the system.
The following options select the additional information that is reported for the IPC mechanism.
-a Report all information as if the -b, -c, -o, -p, and -t options were specified.
-b Display the maximum allowable size. If message queues are specified, the report includes the
QBYTES column. If shared memory is specified, the report includes the SEGSZ column. If
semaphore sets are specified, the report includes the NSEMS column. If named semaphores or
unnamed semaphores are specified, the report includes the VALUE and NWAITERS columns.
-c Display the user profile and group profile of the creator of the entry. For all mechanisms, the
report includes the CREATOR and CGROUP columns.
-E Display extended information. If message queues are specified, the report includes the WPID,
WTID, MSGTYPE, and SIZE columns. If shared memory is specified, the report includes the
APID, NUMATT, and PAGESZ columns. If semaphore sets are specified, the report includes the
SEMNUM, SEMVAL, LOPID, WAITZ, WAITP, and WAITVAL columns. If named semaphores are
specified, the report includes the NAME, LPOST, LWAIT, WAITER, JOB, and THREAD columns.
If unnamed semaphores are specified, the report includes the LPOST, LWAIT, WAITER, JOB, and
THREAD columns.
Since this level of detail is not available on other systems, this option is kept separate from the -a
option. When this option is specified, at least one row is added for each entry.
-j Display the qualified job name instead of the process ID when the -E option is also specified. If
message queues are specified, the report includes the WJOBID column instead of WPID. If shared
memory is specifed, the report includes the AJOBID column instead of APID. If semaphore sets
are specified, the report includes the LOJOBID column instead of LOPID, the WAITZJID column
instead of WAITZ, and the WAITPJID column instead of WAITP.
-o Display information about outstanding usage. If message queues are specified, the report includes
the CBYTES and QNUM columns. If shared memory is specified, the report includes the
NATTCH column.
-p Display process ID information. If message queues are specified, the report includes the LSPID
and LRPID columns. If shared memory is specified, the report includes the CPID and LPID
columns.
-t Display time information. If message queues are specified, the report includes the CTIME,
RTIME, and STIME columns. If shared memory is specified, the report includes the CTIME,
ATIME, and DTIME columns. If semaphore sets are specified, the report includes the CTIME and
OTIME columns.
-T Display thread information. If message queues are specified, the report includes the LSTID and
LRTID columns. If shared memory is specified, the report includes the CTID and LTID columns.
If semaphore sets are specified and the -E option is specified, the report includes the LOTID,
WAITZTID, and WAITPTID columns.
Operands
Extended description
Listed below are descriptions for all of the columns that can be reported in the output. After the column
name, the options that display the column are shown. A value of "default" means that the column is
always displayed, no matter what option is specified.
Qshell 169
AJOBID (-Ej)
The qualified job name of the jobs attached to the shared memory segment.
ATIME (-t, -a)
The last time a job attached to the shared memory segment.
APID (-E)
The process ID of the job or jobs attached to the shared memory segment.
CBYTES (-o, -a)
The total number of bytes in the messages currently on the message queue.
CGROUP (-c, -a)
The group profile of the creator of the entry.
CPID (-p, -a)
The process ID of the job that created the shared memory segment.
CTID (-T)
The thread ID of the thread that created the shared memory segment.
CREATOR (-c, -a)
The user profile of the creator of the entry.
CTIME (-t, -a)
The last time the entry was either created or the owner or permissions, or both, were changed.
DTIME (-t, -a)
The last time a job detached from the shared memory segment.
GROUP (default)
The group profile of the owner of the entry.
ID (default)
The id of the entry in decimal.
JOB (-E)
The fully-qualified job name of the job waiting on the named semaphore or unnamed semaphore.
KEY (default)
The key of the entry in hexadecimal.
LOJOBID (-Ej)
The qualified job name of the last job to change the value of the semaphore using semop().
LOPID (-E)
The process ID of the last job to change the value of the semaphore using semop().
LOTID (-TE)
The thread ID of the last thread to change the value of the semaphore using semop().
LPID (-p, -a)
The process ID of the last job to attach or detach from the shared memory segment or change the
semaphore value.
LPOST (-E)
The fully-qualified job name and thread id of the last thread to post the named semaphore or
unnamed semaphore.
LRPID (-p, -a)
The process ID of the last job to receive a message from the message queue using msgrcv().
LRTID (-T)
The thread ID of the last thread to receive a message from the message queue using msgrcv().
Qshell 171
NWAITERS (-b, -a)
The number of threads waiting on the named semaphore or unnamed semaphore.
OTIME (-t, -a)
The last time that semop() was called using the semaphore set.
OWNER (default)
The user profile of the owner of the entry.
PAGESZ (-E)
The page size (in bytes) of the storage backing the shared memory segment.
QBYTES (-b, -a)
The maximum number of bytes allowed on the message queue.
QNUM (-o, -a)
The number of messages currently on the message queue.
RTIME (-t, -a)
The last time a msgrcv() was called using the message queue.
SEGSZ (-b, -a)
The size of the shared memory segment.
SEMNUM (-E)
The semaphore number in the semaphore set.
SEMVAL (-E)
The value of the semaphore.
SIZE (-E)
The size of the message on the message queue.
STIME (-t, -a)
The last time a msgsnd() was called using the message queue.
T (default)
The entry type. The value is M for a shared memory segment, N for a named semaphore, Q for a
message queue, S for a semaphore set, or U for an unnamed semaphore.
THREAD (-E)
The thread ID of the thread waiting on the named semaphore or unnamed semaphore.
TITLE (default)
The title of the named semaphore or unnamed semaphore.
VALUE (-b, -a)
The current value of the named semaphore or unnamed semaphore.
WAITER (-E)
The index number of the thread waiting on the named semaphore or unnamed semaphore.
WAITP (-E)
The process ID of the job waiting for the semaphore value to reach a positive number.
WAITPJID (-Ej)
The qualified job name of the job waiting for the semaphore value to reach a positive number.
WAITPTID (-ET)
The thread ID of the thread or threads waiting for the semaphore value to reach a positive
number.
WAITVAL (-E)
The value that the thread is waiting for the semaphore to reach.
Exit status
v 0 on success
v >0 if an error occurs
Related tasks:
“ipcrm - Remove interprocess communication identifier” on page 167
locale [ -a ]
Description
The locale utility displays information about the current locale environment to standard output.
In the first synopsis form, locale writes the names and values of locale environment variables. When the
-a option is specified, locale writes the names of all of the available locales on the system.
In the second synopsis form, locale writes detailed information about the locale category or keyword
specified by name.
Options
-a Write information about all available locales.
-c Display the names of the locale categories.
-k Display the names of the locale keywords.
Operands
The name operand can be one of the following locale categories or keywords:
v For category LC_CTYPE the keywords include alnum, alpha, blank, cntrl, digit, graph, lower, print,
punct, space, upper, xdigit, and codeset.
v For category LC_MESSAGES the keywords include yesexpr, noexpr, yesstr, and nostr.
v For category LC_MONETARY the keywords include int_curr_symbol, currency_symbol,
mon_decimal_point, mon_grouping, mon_thousands_sep, positive_sign, negative_sign, int_frac_digits,
Qshell 173
frac_digits, p_cs_precedes, p_sep_by_space, n_cs_precedes, n_sep_by_space, p_sign_posn, n_sign_posn,
debit_sign, credit_sign, left_parenthesis, right_parenthesis, and crncystr.
v For category LC_NUMERIC the keywords include decimal_point, thousands_sep, grouping, and
radixchar.
v For category LC_TIME the keywords include abday, abday_1, abday_2, abday_3, abday_4, abday_5,
abday_6, abday_7, day, day_1, day_2, day_3, day_4, day_5, day_6, day_7, abmon, ab_mon1, abmon_2,
abmon_3, abmon_4, abmon_5, abmon_6, abmon_7, abmon_8, abmon_9, abmon_10, abmon_11,
abmon_12, mon, mon_1 mon_2 mon_3 mon_4 mon_5 mon_6 mon_7 mon_8 mon_9 mon_10 mon_11
mon_12, d_t_fmt, d_fmt, t_fmt, am_pm, am_str, pm_str, era, era_d_fmt, era_year, t_fmt_ampm,
era_t_fmt, era_d_t_fmt, alt_digits.
Exit status
v 0 when successful
v >0 when unsuccessful
Examples
1. Display the current values of the locale environment variables.
locale
2. Display the list of available locales on the system.
locale -a
Related tasks:
“iconv - Convert characters from one CCSID to another CCSID” on page 61
“sed - Stream editor” on page 62
“sort - Sort, merge, or sequence check text files” on page 67
“split - Split files into pieces” on page 69
“uniq - Report or filter out repeated lines in a file” on page 72
“tr - Translate characters” on page 70
Related information:
Locale overview
Description
The logger utility provides a shell command interface for writing messages to the QHST system log. If
message is not specified, and the -f flag is not provided, standard input is logged.
Options
-i Log the process id of the logger process with each line.
-s Log the message to standard error, as well as the system log.
-f Log the specified file.
-t Mark every line in the log with the specified tag.
Exit status
v 0 on success
v >0 if an error occurs.
logname
Description
The logname utility writes the user's login name to standard output followed by a newline.
The logname utility explicitly ignores the LOGNAME and USER environment variables because the
environment cannot be trusted.
Exit status
v 0 on success
v >0 if an error occurs
Related tasks:
“id - Return user identity” on page 166
Description
The sysval utility displays the value of an i5/OS system value or network attribute. One system value or
network attribute is displayed per line of output.
Options
-n Display network attributes.
-p Display the system value or network attribute name with the value.
Operands
See the Retrieve System Values API for the names and descriptions of the valid system values. See the
Retrieve Network Attributes API for the names and descriptions of the valid network attributes.
Examples
1. Display the QDATE system value.
sysval QDATE
2. Display the SYSNAME network attribute.
sysval -n SYSNAME
Qshell 175
tee - Duplicate standard input
Synopsis
Description
The tee utility copies standard input to standard output, making a copy in zero or more files. The output
is unbuffered.
The tee utility takes the default action for all signals, except when the -i option is specified.
Options
-a Append the output to the files rather than overwriting them.
-i Ignore the SIGINT signal.
Environment variables
Exit status
v 0 on success
v >0 if an error occurs
Examples
1. Save the output of a command into three different files.
grep ’off_set=’ code/*.java | tee file1 file2 file3 > logfile
2. Make a working and backup copy of the file, "back9".
cat back9 | tee pro.tees pro.tees.bak
Related tasks:
“echo - Write arguments to standard output” on page 126
Description
The ulimit utility sets or displays resource limits. The resource limits apply to the current process and to
any processes that are started after the resource limit is set.
For each resource, there is a hard or maximum limit and a soft or current limit. The soft limit can be
changed to any value that is less than or equal to the hard limit. The hard limit can be changed to any
value that is greater than or equal to the soft limit. The hard limit can only be increased by a user with
*JOBCTL special authority.
On i5/OS, only the file size (-f) and number of descriptors (-n) resource limits can be set. All of the
resource limits can be displayed.
Operands
When limit is not specified, the value of the resource limit is displayed. When the -H option is specified,
the hard limit is displayed. Otherwise, the soft limit is displayed.
When limit is specified, the value of the resource limit is set. The limit can be an arithmetic expression or
the string "unlimited" for no limit. If neither the -H or -S options are specified, both the hard and soft
limits are set.
If no resource is specified, the default is the file size (-f) resource limit.
Exit status
v 0 when successful
v >0 when unsuccessful
Related tasks:
“umask - Get or set the file mode creation mask” on page 123
“uname - Return system name”
uname [-amnrsv]
Description
The uname utility writes the name of the operating system implementation to standard output. When
options are specified, strings representing one or more system characteristics are written to standard
output.
If the -a flag is specified, or multiple flags are specified, all output is written on a single line, separated
by spaces.
Options
-a Behave as though the -m, -n, -r, -s, and -v options were specified.
-m Write the name of the hardware type of the system to standard output.
Qshell 177
-n Write the name of the system to standard output.
-r Write the current release level of the operating system to standard output.
-s Write the name of the operating system implementation to standard output.
-v Write the version level of this release of the operating system to standard output.
Exit status
v 0 on success
v >0 if an error occurs
Related tasks:
“ulimit - Set or display resource limits” on page 176
Threadsafe: Yes
The QzshSystem() function runs the specified shell command by spawning a child process and invoking
qsh in the child process. qsh interprets and runs command and then exits.
The QzshSystem() function returns when the child process has ended. While the QzshSystem() function
is waiting for the child process to end, it ignores the SIGQUIT and SIGINT signals, and blocks the
SIGCHLD signal. The QzshSystem() function does not affect the status information of any other child
processes started by the calling process.
The QzshSystem() function provides an interface that is like the system() function from the X/Open
standard. The input is a shell command string and it returns the status of the command as reported by
the waitpid() function. The QzshSystem() function starts a new process, invokes the shell to run the
command in the new process, and waits for the new process to end. You can determine the results of the
command by using the macros from the sys/wait.h header file.
You are responsible for making sure descriptors 0, 1, and 2 are available and the appropriate environment
variables are set before calling the QzshSystem() function. If your program is called from the QCMD
command line or run via SBMJOB, your program needs to make sure the environment is set correctly.
This option gives you more control over the environment while providing a standard interface that hides
the details of starting a new process. In the example below, the QzshSystem() function is used to run the
command specified by the first input parameter and the output is stored in the file specified by the
second input parameter. Note that the descriptors are only opened if they are not currently allocated in
the process.
The compiler and debugger are notorious for opening descriptors and leaving them open. Make sure you
run the program from a newly started job.
*command (Input) Pointer to null-terminated string that contains the shell command to run.
Authorities
Object Referred To Authority Required errno
Each directory in the path name *X EACCES
preceding the executable file
Executable file *X EACCES
If executable file is a shell script *RX EACCES
Return value
value QzshSystem() was successful. The return value is the status returned from the waitpid() function.
An application can use the macros provided in the sys/wait.h header file to interpret the status
information from the child process. The return value can be a negative number.
-1 QzshSystem() was not successful. The errno value is set to indicate the error.
Error conditions
If QzshSystem() is not successful, errno typically indicates one of the following errors. Under some
conditions, errno could indicate an error other than those listed here.
[EACCES]
Permission denied.
An attempt was made to access an object in a way forbidden by its object access permissions.
The thread does not have access to the specified file, directory, component, or path.
[ECHILD]
Calling process has no remaining child processes on which wait operation can be performed.
[EFAULT]
The address used for an argument is not correct.
In attempting to use an argument in a call, the system detected an address that is not valid.
While attempting to access a parameter passed to this function, the system detected an address
that is not valid.
[EINVAL]
The value specified for the argument is not correct.
A function was passed incorrect argument values, or an operation was attempted on an object
and the operation specified is not supported for that type of object.
[ENOMEM]
Storage allocation request failed.
A function needed to allocate storage, but no storage is available.
There is not enough memory to perform the requested function.
[ENOSYSRSC]
System resources not available to complete request.
[EUNKNOWN]
Unknown system state.
Qshell 179
The operation failed because of an unknown system state. See any messages in the job log and
correct any errors that are indicated. Then try the operation again.
The following example shows how to use the QzshSystem() and QzshCheckShellCommand() functions.
#include <stdio.h>
#include <qshell.h>
#include <sys/wait.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
if (fd0 != -1) {
close(fd0);
}
if (fd1 != -1) {
close(fd1);
}
if (fd2 != -1) {
close(fd2);
}
exit(0);
}
Output
Command ls completed with exit status 0.
Related concepts:
“QzshCheckShellCommand() - Find QSH Command” on page 182
Related information:
spawn() - Spawn Process
waitpid() - Wait for Specific Child Process
Qshell 181
QzshCheckShellCommand() - Find QSH Command
Syntax
#include <qshell.h>
Threadsafe: Yes
An application can use QzshCheckShellCommand() to verify that command exists and the user has
authority to command before running it.
Parameters
*command (Input) Pointer to null-terminated string that contains the shell command to find. Note that the
command cannot contain the parameters of it. For example, "ls" is acceptable but "ls -l" is not acceptable.
*path (Input) Pointer to null-terminated string that contains a colon delimited list of directories to search.
If this parameter is NULL, QzshCheckShellCommand() uses the value of the PATH environment
variable.
Authorities
When command is an executable file, the user must have the following authorities.
Return value
0 QzshCheckShellCommand() was successful. The command was found in the current environment.
-1 Qp0zCheckShellCommand() was not successful. The errno value is set to indicate the error.
Error conditions
If QzshCheckShellCommand() is not successful, errno typically indicates one of the following errors.
Under some conditions, errno could indicate an error other than those listed here.
[EACCES]
Permission denied.
An attempt was made to access an object in a way forbidden by its object access permissions.
The thread does not have access to the specified file, directory, component, or path.
[EFAULT]
The address used for an argument is not correct.
In attempting to use an argument in a call, the system detected an address that is not valid.
IBM grants you a nonexclusive copyright license to use all programming code examples from which you
can generate similar function tailored to your own specific needs.
Qshell 183
Example: Server program
/**********************************************************************/
/* */
/* Name: server.c */
/* */
/* Description: This program is a server for starting interactive */
/* qsh sessions on remote clients. The program */
/* listens for connections from clients. When a */
/* connection is accepted, it reads the user name */
/* and password of the client. It then swaps to the */
/* the specified user profile and spawns a new */
/* process running the qsh shell interpreter that */
/* handles the connection. */
/* */
/* Parameters: 1. Port number to listen for connections on. */
/* */
/* Notes: 1. The user name and password are sent as plain text */
/* from the client. */
/* 2. The user profile running this program must have */
/* authority to the QSYGETPH, QSYRLSPH, and */
/* QWTSETP APIs. */
/* 3. You will need to change the value of the NLSPATH */
/* environment variable if your system is using a */
/* different language than 2924. */
/* */
/**********************************************************************/
/**********************************************************************/
/* Includes */
/**********************************************************************/
/**********************************************************************/
/* Constants */
/**********************************************************************/
/**********************************************************************/
/* Global Variables */
/**********************************************************************/
/**********************************************************************/
/* Function Prototypes */
/**********************************************************************/
/* Environment variables */
char home_var[PATH_MAX+10];
char logname_var[NAME_SIZE+10];
char path_var[] = "PATH=/usr/bin:.:/QOpenSys/usr/bin";
char stdio_var[] = "QIBM_USE_DESCRIPTOR_STDIO=I";
char terminal_type_var[] = "TERMINAL_TYPE=REMOTE";
char nlspath_var[] = "NLSPATH=/QIBM/ProdData/OS400/Shell/MRI2924/%N";
/********************************************************************/
/* Process the input parameters. */
/********************************************************************/
else {
port = atoi(argv[1]);
}
Qshell 185
/********************************************************************/
/* Initialize the server environment. */
/********************************************************************/
/********************************************************************/
/* Set up the listening socket. */
/********************************************************************/
/* Create a socket. */
if ((sfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0) {
LogError("socket() failed, errno=%d\n", errno);
exit(1);
}
/* Bind to a port. */
memset(&my_addr, ’\0’, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = port;
my_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sfd, (struct sockaddr *)&my_addr, sizeof(my_addr)) != 0) {
LogError("bind() failed for port %d, errno=%d\n", port, errno);
close(sfd);
exit(1);
}
/********************************************************************/
/* Accept connections from clients. */
/********************************************************************/
while (1) {
if ((cfd = accept(sfd, NULL, 0)) < 0) {
LogError("accept() failed, errno=%d\n", errno);
close(sfd);
exit(1);
}
/* Check for the special values that turn off password checking in QSYGETPH(). */
if ((profile[0] == ’*’) || (password[0] == ’*’)) {
getpeername(cfd, (struct sockaddr *)&client_addr, &client_addr_len);
LogError("Invalid password sent from client at %s, port %hu\n",
inet_ntoa(client_addr.sin_addr), client_addr.sin_port);
close(cfd);
continue;
}
Qshell 187
/* Switch back to the server’s user profile. */
QWTSETP(server_ph, &error);
if (error.Bytes_Available != 0) {
LogError("Could not switch back to server’s profile, "
"QWTSETP() failed with exception %7.7s\n",
error.Exception_Id);
break;
}
/* Change to the home directory for the client. The child process
inherits this as its current working directory. */
chdir(cpw->pw_dir);
/* Clean up. */
close(sfd);
exit(0);
return 0;
/* Exception handler */
Cleanup:
/*
* Convert a string to uppercase.
*/
int
strtoupper(char *string)
{
for ( ; *string != ’\0’; ++string)
*string = toupper(*string);
return 0;
} /* End of strtoupper() */
/*
* Read a string from a socket.
*/
int
GetString(int fd, char *buffer, size_t nbytes)
{
char c;
do {
if (read(fd, &c, 1) != 1) {
return -1;
}
*buffer++ = c;
if (--nbytes == 0) {
return 0;
}
} while (c != ’\0’);
Qshell 189
return 0;
} /* End of GetString() */
/*
* Write an error message to the log file.
*/
return;
} /* End of LogError() */
/*
* Send an error message to the client.
*/
return;
} /* End of SendError() */
/*
* Handler to clean up when the program is canceled.
*/
/**********************************************************************/
/* Includes */
/**********************************************************************/
#ifdef _AIX
#include <sys/select.h> /* select() */
#include <strings.h> /* bzero() for FD_ZERO */
#endif
#ifdef __linux__
#include <sys/time.h> /* FD_SET(), select */
#endif
#ifdef USE_ICONV
#include <iconv.h> /* iconv(), and so on */
Qshell 191
#endif
/**********************************************************************/
/* Constants */
/**********************************************************************/
/**********************************************************************/
/* Types */
/**********************************************************************/
/**********************************************************************/
/* Global Variables */
/**********************************************************************/
#ifdef USE_ICONV
iconv_t ecd; /* Conversion descriptor for ASCII to EBCDIC */
iconv_t acd; /* Conversion descriptor for EBCDIC to ASCII */
#else
/* EBCDIC to ASCII translation table */
static uchar AsciiTable[256] =
{
0x00,0x01,0x02,0x03,0x20,0x09,0x20,0x7f, /* 00-07 */
0x20,0x20,0x20,0x0b,0x0c,0x0d,0x0e,0x0f, /* 08-0f */
0x10,0x11,0x12,0x13,0x20,0x0a,0x08,0x20, /* 10-17 */
0x18,0x19,0x20,0x20,0x20,0x1d,0x1e,0x1f, /* 18-1f */
0x20,0x20,0x1c,0x20,0x20,0x0a,0x17,0x1b, /* 20-27 */
0x20,0x20,0x20,0x20,0x20,0x05,0x06,0x07, /* 28-2f */
0x20,0x20,0x16,0x20,0x20,0x20,0x20,0x04, /* 30-37 */
0x20,0x20,0x20,0x20,0x14,0x15,0x20,0x1a, /* 38-3f */
0x20,0x20,0x83,0x84,0x85,0xa0,0xc6,0x86, /* 40-47 */
0x87,0xa4,0xbd,0x2e,0x3c,0x28,0x2b,0x7c, /* 48-4f */
0x26,0x82,0x88,0x89,0x8a,0xa1,0x8c,0x8b, /* 50-57 */
0x8d,0xe1,0x21,0x24,0x2a,0x29,0x3b,0xaa, /* 58-5f */
0x2d,0x2f,0xb6,0x8e,0xb7,0xb5,0xc7,0x8f, /* 60-67 */
0x80,0xa5,0xdd,0x2c,0x25,0x5f,0x3e,0x3f, /* 68-6f */
0x9b,0x90,0xd2,0xd3,0xd4,0xd6,0xd7,0xd8, /* 70-77 */
0xde,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22, /* 78-7f */
0x9d,0x61,0x62,0x63,0x64,0x65,0x66,0x67, /* 80-87 */
0x68,0x69,0xae,0xaf,0xd0,0xec,0xe7,0xf1, /* 88-8f */
0xf8,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70, /* 90-97 */
0x71,0x72,0xa6,0xa7,0x91,0xf7,0x92,0xcf, /* 98-9f */
0xe6,0x7e,0x73,0x74,0x75,0x76,0x77,0x78, /* a8-a7 */
0x79,0x7a,0xad,0xa8,0xd1,0xed,0xe8,0xa9, /* a8-af */
0x5e,0x9c,0xbe,0xfa,0xb8,0x15,0x14,0xac, /* b0-b7 */
0xab,0xf3,0x5b,0x5d,0xee,0xf9,0xef,0x9e, /* b8-bf */
0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47, /* c0-c7 */
0x48,0x49,0xf0,0x93,0x94,0x95,0xa2,0xe4, /* c8-cf */
0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50, /* d0-d7 */
0x51,0x52,0xfb,0x96,0x81,0x97,0xa3,0x98, /* d8-df */
0x5c,0xf6,0x53,0x54,0x55,0x56,0x57,0x58, /* e0-e7 */
0x59,0x5a,0xfc,0xe2,0x99,0xe3,0xe0,0xe5, /* e8-ef */
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, /* f0-f7 */
0x38,0x39,0xfd,0xea,0x9a,0xeb,0xe9,0xff /* f8-ff */
};
/**********************************************************************/
/* Function Prototypes */
/**********************************************************************/
Qshell 193
int buf_size; /* Amount of data read from server */
/********************************************************************/
/* Initialization. */
/********************************************************************/
#ifdef USE_ICONV
/* Open the conversion descriptors for converting between ASCII and
EBCDIC. Assume the server job is running in CCSID 37.
This must be changed if the server job is running in a
different CCSID. The input parameters to iconv_open() may need to
be changed depending on the operating system. This ioonv_open() is
coded for AIX. */
if ((acd = iconv_open("IBM-850", "IBM-037")) < 0) {
perror("qshc: iconv_open() failed for ASCII to EBCDIC");
exit(1);
}
/********************************************************************/
/* Process the input parameters. */
/********************************************************************/
if (argc < 2) {
usage();
}
else {
fprintf(stderr, "qshc: Could not find host %s\n", hostname);
exit(1);
}
} /* End of if */
else {
fprintf(stderr, "qshc: Could not find host %s\n", hostname);
exit(1);
}
} /* End of else */
/********************************************************************/
/* Connect to the qsh server on the specified system. */
/********************************************************************/
/* Create a socket. */
if ((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0) {
perror("qshc: socket() failed");
exit(1);
}
/********************************************************************/
/* Send the user name and password to the server. */
/********************************************************************/
ascii_user = ascii_buf;
ascii_pwd = ascii_buf + 100;
ebcdic_user = ebcdic_buf;
ebcdic_pwd = ebcdic_buf + 100;
Qshell 195
}
/* Get the user name and password from the ~/.netrc file. */
else {
if (GetPassword(hostname, ascii_user, ascii_pwd) != 0) {
fprintf(stderr, "qshc: Could not find user or password in ~/.netrc\n");
exit(1);
}
}
/* Send the user name and password to the qsh server. Note that the
user name and password are sent as plain text. */
if ((rc = write(sd, (void *)ebcdic_user, strlen(ebcdic_user)+1)) < 0) {
perror("qshc: write() failed sending username\n");
close(sd);
exit(1);
}
/********************************************************************/
/* Process input and output between the user and the remote shell. */
/********************************************************************/
/* Loop forever. */
while (1) {
/* Select on stdin and the socket connected to the remote shell. */
FD_ZERO(&read_set);
FD_SET(0, &read_set);
FD_SET(sd, &read_set);
if (rc == 0) {
continue;
}
exit(0);
} /* End of main() */
/*
* Convert a string from ASCII to EBCDIC.
*/
int
ConvertToEBCDIC(char *ibuf, size_t ileft, char *obuf, size_t oleft)
{
int rc;
#ifdef USE_ICONV
rc = iconv(ecd, (const char**)&ibuf, &ileft, &obuf, &oleft);
#else
rc = Translate((uchar *)ibuf, ileft, (uchar *)obuf, EbcdicTable);
#endif
if (rc < 0)
perror("qshc: error converting to EBCDIC");
return rc;
} /* End of ConvertToEBCDIC() */
Qshell 197
/*
* Convert a string from EBCDIC to ASCII.
*/
int
ConvertToASCII(char *ibuf, size_t ileft, char *obuf, size_t oleft)
{
int rc;
#ifdef USE_ICONV
rc = iconv(acd, (const char**)&ibuf, &ileft, &obuf, &oleft);
#else
rc = Translate((uchar *)ibuf, ileft, (uchar *)obuf, AsciiTable);
#endif
if (rc < 0)
perror("qshc: error converting to ASCII");
return rc;
} /* End of ConvertToASCII() */
/*
* Get the user name and password for the specified system from the
* ~/.netrc file.
*/
int
GetPassword(char *sysname, char *logname, char *password)
{
#define BUFSIZE 256
char buffer[BUFSIZE];
char *systag, *logtag;
int logflag = 0, pwdflag = 0;
FILE *netrc;
struct passwd *pwdbuf;
int rc=0;
fclose(netrc);
return rc;
} /* End of GetPassword() */
#ifndef USE_ICONV
/*
* Translate bytes using the specified translation table.
*/
int
Translate(uchar *ip, size_t ilen, uchar *op, uchar *table)
{
int index;
for (index = 0; index < ilen; ++index) {
*op = table[*ip];
ip++;
op++;
}
return 0;
} /* End of Translate() */
#endif
/*
* Signal handler.
*/
void
MySignalHandler(int signo)
{
switch (signo) {
case SIGINT:
printf("\nqshc: <ctrl>c ends this program\n");
printf("Ended qsh session on %s\n", sysname);
exit(0);
break;
default:
exit(1);
break;
} /* End of switch */
return;
} /* End of MySignalHandler() */
Qshell 199
/*
* Display usage message.
*/
void usage(void)
{
fprintf(stderr, "Usage: qshc [-n] [-p port] hostname\n");
exit(1);
} /* End of usage() */
The following example shows how to create the server program on i5/OS
. The example assumes that the source for the server program is in member SERVER in the file
QGPL/QCSRC. The server program is owned by a special user profile QSHSVR that has minimal
authorities but private authority to the QSYGETPH(), QSYRLSPH(), and QWTSETP() APIs. It is not
possible to sign on using the QSHSVR user profile. The server program adopts the authority of QSHSVR
so it can switch to the client's user profile.
CRTBNDC PGM(QGPL/SERVER)
SRCFILE(QGPL/QCSRC)
SRCMBR(SERVER)
OPTIMIZE(40)
SYSIFCOPT(*IFSIO)
LOCALETYPE(*LOCALE)
USRPRF(*OWNER)
AUT(*USE)
TEXT(’Shell server’)
CRTUSRPRF USRPRF(QSHSVR)
PASSWORD(*NONE)
USRCLS(*USER)
TEXT(’Shell server profile’)
CHGOBJOWN OBJ(QGPL/SERVER)
OBJTYPE(*PGM)
NEWOWN(QSHSVR)
GRTOBJAUT OBJ(QSYS/QSYGETPH)
OBJTYPE(*PGM)
USER(QSHSVR)
AUT(*USE)
GRTOBJAUT OBJ(QSYS/QSYRLSPH)
OBJTYPE(*PGM)
USER(QSHSVR)
AUT(*USE)
GRTOBJAUT OBJ(QSYS/QWTSETP)
OBJTYPE(*PGM)
USER(QSHSVR)
AUT(*USE)
You might want to run the server program and any child processes started by the server in their own
subsystem. The following example shows how to create the following objects:
v A subsystem description and related routing entry and prestart job entries for both non-threaded and
multi-thread capable jobs.
v A class.
v A job description.
v A job queue.
The following example shows how to start the subsystem described in the previous example and the
server program.
STRSBS SBSD(QGPL/QSHELL)
SBMJOB CMD(CALL QGPL/SERVER)
JOB(SERVER)
JOBD(QGPL/SHELL)
JOBQ(QGPL/SHELL)
USER(QSHSVR)
The following example shows how to create the client program on AIX using xlc. The example assumes
that the source for the client program is in file qshc.c in the current working directory. The client program
has been compiled and tested on AIX 4.1.5 using xlc and Linux 2.0.29 using gcc 2.7.2.1.
xlc -o qshc qshc.c
Qshell 201
Running the client program
The following example shows how to run the client program and connect to a server running on system
myas400. Before running the command, there must be an entry in your ~/.netrc file for the specified
system and the server must be started and listening on TCP/IP port 6042.
qshc myas400
Other information
Printed books:
v Qshell for iSeries
IBM may not offer the products, services, or features discussed in this document in other countries.
Consult your local IBM representative for information on the products and services currently available in
your area. Any reference to an IBM product, program, or service is not intended to state or imply that
only that IBM product, program, or service may be used. Any functionally equivalent product, program,
or service that does not infringe any IBM intellectual property right may be used instead. However, it is
the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or
service.
IBM may have patents or pending patent applications covering subject matter described in this
document. The furnishing of this document does not grant you any license to these patents. You can send
license inquiries, in writing, to:
IBM Director of Licensing
IBM Corporation
North Castle Drive
Armonk, NY 10504-1785
U.S.A.
For license inquiries regarding double-byte (DBCS) information, contact the IBM Intellectual Property
Department in your country or send inquiries, in writing, to:
IBM World Trade Asia Corporation
Licensing
2-31 Roppongi 3-chome, Minato-ku
Tokyo 106-0032, Japan
The following paragraph does not apply to the United Kingdom or any other country where such
provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION
PROVIDES THIS PUBLICATION “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some
states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this
statement may not apply to you.
This information could include technical inaccuracies or typographical errors. Changes are periodically
made to the information herein; these changes will be incorporated in new editions of the publication.
IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this
publication at any time without notice.
Any references in this information to non-IBM Web sites are provided for convenience only and do not in
any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of
the materials for this IBM product and use of those Web sites is at your own risk.
IBM may use or distribute any of the information you supply in any way it believes appropriate without
incurring any obligation to you.
Licensees of this program who wish to have information about it for the purpose of enabling: (i) the
exchange of information between independently created programs and other programs (including this
one) and (ii) the mutual use of the information which has been exchanged, should contact:
IBM Corporation
Such information may be available, subject to appropriate terms and conditions, including in some cases,
payment of a fee.
| The licensed program described in this document and all licensed material available for it are provided
| by IBM under terms of the IBM Customer Agreement, IBM International Program License Agreement,
| IBM License Agreement for Machine Code, or any equivalent agreement between us.
Any performance data contained herein was determined in a controlled environment. Therefore, the
results obtained in other operating environments may vary significantly. Some measurements may have
been made on development-level systems and there is no guarantee that these measurements will be the
same on generally available systems. Furthermore, some measurements may have been estimated through
extrapolation. Actual results may vary. Users of this document should verify the applicable data for their
specific environment.
Information concerning non-IBM products was obtained from the suppliers of those products, their
published announcements or other publicly available sources. IBM has not tested those products and
cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM
products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of
those products.
All statements regarding IBM's future direction or intent are subject to change or withdrawal without
notice, and represent goals and objectives only.
All IBM prices shown are IBM's suggested retail prices, are current and are subject to change without
notice. Dealer prices may vary.
This information is for planning purposes only. The information herein is subject to change before the
products described become available.
This information contains examples of data and reports used in daily business operations. To illustrate
them as completely as possible, the examples include the names of individuals, companies, brands, and
products. All of these names are fictitious and any similarity to the names and addresses used by an
actual business enterprise is entirely coincidental.
COPYRIGHT LICENSE:
This information contains sample application programs in source language, which illustrate programming
techniques on various operating platforms. You may copy, modify, and distribute these sample programs
in any form without payment to IBM, for the purposes of developing, using, marketing or distributing
application programs conforming to the application programming interface for the operating platform for
which the sample programs are written. These examples have not been thoroughly tested under all
conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these
programs.
Each copy or any portion of these sample programs or any derivative work, must include a copyright
notice as follows:
© (your company name) (year). Portions of this code are derived from IBM Corp. Sample Programs. ©
Copyright IBM Corp. _enter the year or years_. All rights reserved.
If you are viewing this information softcopy, the photographs and color illustrations may not appear.
Trademarks
The following terms are trademarks of International Business Machines Corporation in the United States,
other countries, or both:
AIX
AS/400
DB2
DB2 Universal Database
i5/OS
IBM
iSeries
OS/2
RDN
Redbooks
REXX
System i
| Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks
| of Adobe Systems Incorporated in the United States, and/or other countries.
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other
countries, or both.
| Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both.
UNIX is a registered trademark of The Open Group in the United States and other countries.
Other company, product, or service names may be trademarks or service marks of others.
Personal Use: You may reproduce these publications for your personal, noncommercial use provided that
all proprietary notices are preserved. You may not distribute, display or make derivative works of these
publications, or any portion thereof, without the express consent of IBM.
Commercial Use: You may reproduce, distribute and display these publications solely within your
enterprise provided that all proprietary notices are preserved. You may not make derivative works of
these publications, or reproduce, distribute or display these publications or any portion thereof outside
your enterprise, without the express consent of IBM.
Except as expressly granted in this permission, no other permissions, licenses or rights are granted, either
express or implied, to the publications or any information, data, software or other intellectual property
contained therein.
IBM reserves the right to withdraw the permissions granted herein whenever, in its discretion, the use of
the publications is detrimental to its interest or, as determined by IBM, the above instructions are not
being properly followed.
Printed in USA