*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->HP-UX 11i man pages -> ksh (1)              
Title
Content
Arch
Section
 

Contents


 ksh(1)                                                               ksh(1)




 NAME    [Toc]    [Back]
      ksh, rksh - shell, the standard/restricted command programming
      language

 SYNOPSIS    [Toc]    [Back]
      ksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ...  [+o
      option] ...  [-c string] [arg ...]

      rksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ...  [+o
      option] ...  [-c string] [arg ...]

 DESCRIPTION    [Toc]    [Back]
      ksh is a command programming language that executes commands read from
      a terminal or a file.  rksh is a restricted version of the command
      interpreter ksh, used to set up login names and execution environments
      whose capabilities are more controlled than those of the standard
      shell.  See Invoking ksh and Special Commands sections later in this
      entry for details about command line options and arguments,
      particularly the set command.

    Definitions    [Toc]    [Back]
      metacharacter  One of the following characters:

                     ;   &   (   )   |   <   >   new-line   space   tab

      blank          A tab or space character.

      identifier     A sequence of letters, digits, or underscores starting
                     with a letter or underscore.  Identifiers are used as
                     names for functions and named parameters.

      word           A sequence of characters separated by one or more nonquoted
 metacharacters .

      command        A sequence of characters in the syntax of the shell
                     language.  The shell reads each command and carries out
                     the desired action, either directly or by invoking
                     separate utilities.

      special command
                     A command that is carried out by the shell without
                     creating a separate process.  Often called ``built-in
                     commands''.  Except for documented side effects, most
                     special commands can be implemented as separate
                     utilities.

      #              The # character is interpreted as the beginning of a
                     comment.  See Quoting below.

    Commands    [Toc]    [Back]
      A simple-command is a sequence of blank-separated words that can be



 Hewlett-Packard Company            - 1 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      preceded by a parameter assignment list.  (See Environment below).
      The first word specifies the name of the command to be executed.
      Except as specified below, the remaining words are passed as arguments
      to the invoked command.  The command name is passed as argument 0 (see
      exec(2)).  The value of a simple-command is its exit status if it
      terminates normally, or (octal) 200+status if it terminates abnormally
      (see signal(5) for a list of status values).

      A pipeline is a sequence of one or more commands separated by |.  The
      standard output of each command except the last is connected by a pipe
      (see pipe(2)) to the standard input of the next command.  Each command
      is run as a separate process; the shell waits for the last command to
      terminate.  The exit status of a pipeline is the exit status of the
      last command in the pipeline.

      A list is a sequence of one or more pipelines separated by ;, &, &&,
      or ||, and optionally terminated by ;, &, or |&.  Of these five
      symbols, ;, &, and |& have equal precedence.  && and || have a higher
      but also equal precedence.  A semicolon (;) causes sequential
      execution of the preceding pipeline; an ampersand (&) causes
      asynchronous execution of the preceding pipeline (that is, the shell
      does not wait for that pipeline to finish).  The symbol |& causes
      asynchronous execution of the preceding command or pipeline with a
      two-way pipe established to the parent shell (known as a co-process).
      The standard input and output of the spawned command can be written to
      and read from by the parent shell using the -p option of the special
      commands read and print described later.  The symbol && (||) causes
      the list following it to be executed only if the preceding pipeline
      returns a zero (non-zero) value.  An arbitrary number of new-lines can
      appear in a list, instead of semicolons, to delimit commands.

      A command is either a simple-command or one of the following.  Unless
      otherwise stated, the value returned by a command is that of the last
      simple-command executed in the command.

      for identifier [in word ...] do list done
                     Each time for is executed, identifier is set to the
                     next word taken from the in word list.  If in word ...
                     is omitted, for executes the do list once for each
                     positional parameter set (see Parameter Substitution
                     below).  Execution ends when there are no more words in
                     the list.

      select identifier [in word...] do list done
                     A select command prints on standard error (file
                     descriptor 2), the set of words, each preceded by a
                     number.  If in word ...  is omitted, the positional
                     parameters are used instead (see Parameter Substitution
                     below).  The PS3 prompt is printed and a line is read
                     from the standard input.  If this line starts with the
                     number of one of the listed words, the value of the



 Hewlett-Packard Company            - 2 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




                     parameter identifier is set to the word corresponding
                     to this number.  If this line is empty, the selection
                     list is printed again.  Otherwise the value of the
                     parameter identifier is set to null.  The contents of
                     the line read from standard input is saved in the
                     parameter REPLY.  The list is executed for each
                     selection until a break or end-of-file (eof) is
                     encountered.

      case word in [[ (] pattern [ | pattern] ... ) list ;; ] ... esac
                     A case command executes the list associated with the
                     first pattern that matches word.  The form of the
                     patterns is identical to that used for file name
                     generation (see File Name Generation below).

      if list then list [ elif list then list] ... [ else list] fi
                     The list following if is executed and, if it returns a
                     zero exit status, the list following the first then is
                     executed.  Otherwise, the list following elif is
                     executed and, if its value is zero, the list following
                     the next then is executed.  Failing that, the else list
                     is executed.  If no else list or then list is executed,
                     if returns a zero exit status.

      while list do list done
      until list do list done
                     A while command repeatedly executes the while list, and
                     if the exit status of the last command in the list is
                     zero, executes the do list; otherwise the loop
                     terminates.  If no commands in the do list are
                     executed, while returns a zero exit status; until can
                     be used in place of while to negate the loop
                     termination test.

      (list)         Execute list in a separate environment.  If two
                     adjacent open parentheses are needed for nesting, a
                     space must be inserted to avoid arithmetic evaluation
                     as described below.

      { list;}       Execute list, but not in a separate environment.  Note
                     that { is a keyword and requires a trailing blank to be
                     recognized.

      [[ expression ]]
                     Evaluates expression and returns a zero exit status
                     when expression is true.  See Conditional Expressions
                     below, for a description of expression.  Note that [[
                     and ]] are keywords and require blanks between them and
                     expression.





 Hewlett-Packard Company            - 3 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      function identifier {list;}
      identifier () {list;}
                     Define a function referred to by identifier.  The body
                     of the function is the list of commands between { and }
                     (see Functions below).

      time pipeline  pipeline is executed and the elapsed time, user time,
                     and system time are printed on standard error. Note
                     that the time keyword can appear anywhere in the
                     pipeline to time the entire pipeline. To time a
                     particular command in a pipeline, see time(1).

      The following keywords are recognized only as the first word of a
      command and when not quoted:

           if then else elif fi case esac for while
           until do done { } function select time [[ ]]

    Comments    [Toc]    [Back]
      A word beginning with # causes that word and all subsequent characters
      up to a new-line to be ignored.

    Aliasing    [Toc]    [Back]
      The first word of each command is replaced by the text of an alias, if
      an alias for this word has been defined.  An alias name consists of
      any number of characters excluding metacharacters, quoting characters,
      file expansion characters, parameter and command substitution
      characters, and =.  The replacement string can contain any valid shell
      script, including the metacharacters listed above.  The first word of
      each command in the replaced text, other than any that are in the
      process of being replaced, is tested for additional aliases.  If the
      last character of the alias value is a blank, the word following the
      alias is also checked for alias substitution.  Aliases can be used to
      redefine special built-in commands, but cannot be used to redefine the
      keywords listed above.  Aliases can be created, listed, and exported
      with the alias command and can be removed with the unalias command.
      Exported aliases remain in effect for subshells but must be
      reinitialized for separate invocations of the shell (see Invoking ksh
      below).

      Aliasing is performed when scripts are read, not while they are
      executed.  Therefore, for it to take effect, alias must be executed
      before the command referring to the alias is read.

      Aliases are frequently used as a shorthand for full path names.  An
      option to the aliasing facility allows the value of the alias to be
      automatically set to the full path name of the corresponding command.
      These aliases are called tracked aliases.  The value of a tracked
      alias is defined the first time the identifier is read and becomes
      undefined each time the PATH variable is reset.  These aliases remain
      tracked so that the next reference redefines the value.  Several



 Hewlett-Packard Company            - 4 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      tracked aliases are compiled into the shell.  The -h option of the set
      command converts each command name that is an identifier into a
      tracked alias.

      The following exported aliases are compiled into the shell but can be
      unset or redefined:

           autoload='typeset -fu'
           false='let 0'
           functions='typeset -f'
           hash='alias -t -'
           history='fc -l'
           integer='typeset -i'
           nohup='nohup '
           r='fc -e -'
           stop='kill -STOP'
           suspend='kill -STOP $$'
           true=':'
           type='whence -v'

    Tilde Substitution    [Toc]    [Back]
      After alias substitution is performed, each word is checked to see if
      it begins with an unquoted ~.  If it does, the word up to a / is
      checked to see if it matches a user name in the /etc/passwd file.  If
      a match is found, the ~ and the matched login name are replaced by the
      login directory of the matched user.  This is called a tilde
      substitution.  If no match is found, the original text is left
      unchanged.  A ~, alone or before a /, is replaced by the value of the
      HOME parameter.  A ~ followed by a + or - is replaced by the value of
      the parameter PWD and OLDPWD, respectively.  In addition, tilde
      substitution is attempted when the value of a parameter assignment
      begins with a ~.

    Command Substitution    [Toc]    [Back]
      The standard output from a command enclosed in parenthesis preceded by
      a dollar sign ($(command)) or a pair of back single quotes (accent
      grave) (`command`) can be used as part or all of a word; trailing
      new-lines are removed.  In the second (archaic) form, the string
      between the quotes is processed for special quoting characters before
      the command is executed (see Quoting below).  The command substitution
      $(cat file) can be replaced by the equivalent but faster $(<file).
      Command substitution of most special commands (built-ins) that do not
      perform I/O redirection are carried out without creating a separate
      process.  However, command substitution of a function creates a
      separate process to execute the function and all commands (built-in or
      otherwise) in that function.

      An arithmetic expression enclosed in double parenthesis preceded by a
      dollar sign ($((expression))) is replaced by the value of the
      arithmetic expression within the double parenthesis (see Arithmetic
      Evaluation below for a description of arithmetic expressions).



 Hewlett-Packard Company            - 5 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




    Parameter Substitution    [Toc]    [Back]
      A parameter is an identifier, one or more digits, or any of the
      characters *, @, #, ?, -, $, and !.  A named parameter (a parameter
      denoted by an identifier) has a value and zero or more attributes.
      Named parameters can be assigned values and attributes by using the
      typeset special command.  Attributes supported by ksh are described
      later with the typeset special command.  Exported parameters pass
      values and attributes to the environment.

      The shell supports a limited one-dimensional array facility.  An
      element of an array parameter is referenced by a subscript.  A
      subscript is denoted by a [ followed by an arithmetic expression (see
      Arithmetic Evaluation below) followed by a ].  To assign values to an
      array, use set -A name value ....  The value of all subscripts must be
      in the range of 0 through 1023.  Arrays need not be declared.  Any
      reference to a named parameter with a valid subscript is legal and an
      array is created if necessary.  Referencing an array without a
      subscript is equivalent to referencing the first element.

      The value of a named parameter can also be assigned by writing:

           name=value [name=value] ...

      If the -i integer attribute is set for name, the value is subject to
      arithmetic evaluation as described below.

      Positional parameters, parameters denoted by a number, can be assigned
      values with the set special command.  Parameter $0 is set from
      argument zero when the shell is invoked.

      The character $ is used to introduce substitutable parameters.

           ${parameter}        Substitute the value of the parameter, if
                               any.  Braces are required when parameter is
                               followed by a letter, digit, or underscore
                               that should not be interpreted as part of its
                               name or when a named parameter is
                               subscripted.  If parameter is one or more
                               digits, it is a positional parameter.  A
                               positional parameter of more than one digit
                               must be enclosed in braces.  If parameter is
                               * or @ all the positional parameters,
                               starting with $1, are substituted (separated
                               by a field separator character).  If an array
                               identifier with subscript * or @ is used, the
                               value for each element is substituted
                               (separated by a field separator character).
                               The shell reads all the characters from ${ to
                               the matching } as part of the same word even
                               if it contains braces or metacharacters.




 Hewlett-Packard Company            - 6 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




           ${#parameter}       If parameter is * or @, the number of
                               positional parameters is substituted.
                               Otherwise, the length of the value of the
                               parameter is substituted.

           ${#identifier[*]}   Substitute the number of elements in the
                               array identifier.

           ${parameter:-word}  If parameter is set and is non-null,
                               substitute its value; otherwise substitute
                               word.

           ${parameter:=word}  If parameter is not set or is null, set it to
                               word; then substitute the value of the
                               parameter.  Positional parameters cannot be
                               assigned in this way.

           ${parameter:?word}  If parameter is set and is non-null,
                               substitute its value; otherwise, print word
                               and exit from the shell.  If word is omitted,
                               a standard message is printed.

           ${parameter:+word}  If parameter is set and is non-null,
                               substitute word; otherwise substitute
                               nothing.

           ${parameter#pattern}
           ${parameter##pattern}
                               If the shell pattern matches the beginning of
                               the value of parameter, the value of this
                               substitution is the value of the parameter
                               with the matched portion deleted; otherwise
                               the value of this parameter substituted.  In
                               the former case, the smallest matching
                               pattern is deleted; in the latter case, the
                               largest matching pattern is deleted.

           ${parameter%pattern}
           ${parameter%%pattern}
                               If the shell pattern matches the end of the
                               value of parameter, the value of parameter
                               with the matched part is deleted; otherwise
                               substitute the value of parameter.  In the
                               former, the smallest matching pattern is
                               deleted; in the latter, the largest matching
                               pattern is deleted.

           In the above, word is not evaluated unless it is used as the
           substituted string.  Thus, in the following example, pwd is
           executed only if d is not set or is null:




 Hewlett-Packard Company            - 7 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




                echo ${d:-$(pwd)}

           If the colon (:) is omitted from the above expressions, the shell
           only checks to determine whether or not parameter is set.

      The following parameters are set automatically by the shell:

           #              The number of positional parameters in decimal.
           -              Options supplied to the shell on invocation or by
                          the set command.
           ?              The decimal value returned by the last executed
                          command.
           $              The process number of this shell.
           _              Initially, the value of _ is an absolute pathname
                          of the shell or script being executed as passed in
                          the environment.  Subsequently it is assigned the
                          last argument of the previous command.  This
                          parameter is not set for commands which are
                          asynchronous.  This parameter is also used to hold
                          the name of the matching MAIL file when checking
                          for mail.
           !              The process number of the last background command
                          invoked.
           COLUMNS        If this variable is set, its value is used to
                          define the width of the edit window for the shell
                          edit modes and for printing select lists.  In a
                          windowed environment, if the shell detects that
                          the window size has changed, the shell updates the
                          value of COLUMNS.
           ERRNO          The value of errno as set by the most recently
                          failed system call.  This value is system
                          dependent and is intended for debugging purposes.
           LINENO         The line number of the current line within the
                          script or function being executed.
           LINES          If this variable is set, the value is used to
                          determine the column length for printing select
                          lists.  select lists print vertically until about
                          two-thirds of LINES lines are filled.  In a
                          windowed environment, if the shell detects that
                          the window size has changed, the shell updates the
                          value of LINES.
           OLDPWD         The previous working directory set by the cd
                          command.
           OPTARG         The value of the last option argument processed by
                          the getopts special command.
           OPTIND         The index of the last option argument processed by
                          the getopts special command.
           PPID           The process number of the parent of the shell.
           PWD            The present working directory set by the cd
                          command.




 Hewlett-Packard Company            - 8 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




           RANDOM         Each time this parameter is evaluated, a random
                          integer, uniformly distributed between 0 and
                          32767, is generated.  The sequence of random
                          numbers can be initialized by assigning a numeric
                          value to RANDOM.
           REPLY          This parameter is set by the select statement and
                          by the read special command when no arguments are
                          supplied.
           SECONDS        Each time this parameter is referenced, the number
                          of seconds since shell invocation is returned.  If
                          this parameter is assigned a value, the value
                          returned upon reference is the value that was
                          assigned plus the number of seconds since the
                          assignment.

      The following parameters are used by the shell:

           CDPATH         The search path for the cd command.
           EDITOR         If the value of this variable ends in emacs,
                          gmacs, or vi and the VISUAL variable is not set,
                          the corresponding option is turned on (see set in
                          Special Commands below).
           ENV            If this parameter is set, parameter substitution
                          is performed on the value to generate the path
                          name of the script to be executed when the shell
                          is invoked (see Invoking ksh below).  This file is
                          typically used for alias and function definitions.
           FCEDIT         The default editor name for the fc command.
           FPATH          The search path for function definitions.  This
                          path is searched when a function with the -u
                          attribute is referenced and when a command is not
                          found.  If an executable file is found, then it is
                          read and executed in the current environment.
           IFS            Internal field separators, normally space, tab,
                          and new-line that are used to separate command
                          words resulting from command or parameter
                          substitution, and for separating words with the
                          special command read.  The first character of the
                          IFS parameter is used to separate arguments for
                          the "$*" substitution (see Quoting below).
           HISTFILE       If this parameter is set when the shell is
                          invoked, its value is the path name of the file
                          that is used to store the command history.  The
                          default value is $HOME/.sh_history.  If the user
                          has appropriate privileges and no HISTFILE is
                          given, then no history file is used (see Command
                          Re-entry below).
           HISTSIZE       If this parameter is set when the shell is
                          invoked, the number of previously entered commands
                          accessible to this shell will be greater than or
                          equal to this number.  The default is 128.



 Hewlett-Packard Company            - 9 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




           HOME           The default argument (home directory) for the cd
                          command.
           MAIL           If this parameter is set to the name of a mail
                          file and the MAILPATH parameter is not set, the
                          shell informs the user of arrival of mail in the
                          specified file.
           MAILCHECK      This variable specifies how often (in seconds) the
                          shell checks for changes in the modification time
                          of any of the files specified by the MAILPATH or
                          MAIL parameters.  The default value is 600
                          seconds.  When the time has elapsed the shell
                          checks before issuing the next prompt.
           MAILPATH       A list of file names separated by colons (:).  If
                          this parameter is set, the shell informs the user
                          of any modifications to the specified files that
                          have occurred within the last MAILCHECK seconds.
                          Each file name can be followed by a ? and a
                          message to be printed, in which case the message
                          undergoes parameter and command substitution with
                          the parameter $_ defined as the name of the
                          changed file.  The default message is you have
                          mail in $_.
           PATH           The search path for commands (see Execution
                          below).  The user cannot change PATH if executing
                          rksh (except in the .profile file).
           PS1            The value of this parameter is expanded for
                          parameter substitution, to define the primary
                          prompt string which, by default, is $ followed by
                          a space character.  The character ! in the primary
                          prompt string is replaced by the command number
                          (see Command Re-entry below).  To include a ! in
                          the prompt, use !!.
           PS2            Secondary prompt string, by default > followed by
                          a space character.
           PS3            Selection prompt string used within a select loop,
                          by default #? followed by a space character.
           PS4            The value of this variable is expanded for
                          parameter substitution and precedes each line of
                          an execution trace.  If PS4 is unset, the
                          execution trace prompt is + followed by a space
                          character.
           SHELL          The path name of the shell is kept in the
                          environment.  When invoked, the shell is
                          restricted if the value of this variable contains
                          an r in the basename.
           TMOUT          If set to a value greater than zero, the shell
                          terminates if a command is not entered within the
                          prescribed number of seconds after issuing the PS1
                          prompt.
           VISUAL         Invokes the corresponding option when the value of
                          this variable ends in emacs, gmacs, or vi (see set



 Hewlett-Packard Company           - 10 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




                          in Special Commands below).

      The shell gives default values to PATH, PS1, PS2, MAILCHECK, TMOUT,
      and IFS.  HOME, SHELL, ENV, and MAIL are never set automatically by
      the shell (although HOME, SHELL, and MAIL are set by login(1)).

    Blank Interpretation    [Toc]    [Back]
      After parameter and command substitution, the results of substitution
      are scanned for field separator characters (found in IFS), and split
      into distinct arguments where such characters are found.  ksh retains
      explicit null arguments ( or '') but removes implicit null arguments
      (those resulting from parameters that have no values).

    File Name Generation    [Toc]    [Back]
      Following substitution, each command word is processed as a pattern
      for file name expansion unless the -f option has been set.  The form
      of the patterns is the Pattern Matching Notation defined by regexp(5).
      The word is replaced with sorted file names matching the pattern.  If
      no file name is found that matches the pattern, the word is left
      unchanged.

      In addition to the notation described in regexp(5), ksh recognizes
      composite patterns made up of one or more pattern lists separated from
      each other with a |.  Composite patterns can be formed with one or
      more of the following:

           ?(pattern-list)     Optionally matches any one of the given
                               patterns.

           *(pattern-list)     Matches zero or more occurrences of the given
                               patterns.

           +(pattern-list)     Matches one or more occurrences of the given
                               patterns.

           @(pattern-list)     Matches exactly one of the given patterns.

           !(pattern-list)     Matches anything, except one of the given
                               patterns.

    Quoting    [Toc]    [Back]
      Each of the metacharacters listed above (See Definitions above) has a
      special meaning to the shell and causes termination of a word unless
      quoted.  A character can be quoted (i.e., made to stand for itself) by
      preceding it with a \.  The pair \new-line is ignored.  All characters
      enclosed between a pair of single quote marks (''), are quoted.  A
      single quote cannot appear within single quotes.  Inside double quote
      marks (""), parameter and command substitution occurs and \ quotes the
      characters \, `, ", and $.  $* and $@ have identical meanings when not
      quoted or when used as a parameter assignment value or as a file name.
      However, when used as a command argument, "$*" is equivalent to



 Hewlett-Packard Company           - 11 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      "$1d$2d...", where d is the first character of the IFS parameter,
      whereas "$@" is equivalent to "$1" "$2" ....  Inside back single quote
      (accent grave) marks (``) \ quotes the characters \, `, and $.  If the
      back single quotes occur within double quotes, \ also quotes the
      character ".

      The special meaning of keywords or aliases can be removed by quoting
      any character of the keyword.  The recognition of function names or
      special command names listed below cannot be altered by quoting them.

    Arithmetic Evaluation    [Toc]    [Back]
      The ability to perform integer arithmetic is provided with the special
      command let.  Evaluations are performed using long arithmetic.
      Constants take the form [base#]n, where base is a decimal number
      between two and thirty-six representing the arithmetic base and n is a
      number in that base.  If base is omitted, base 10 is used.

      An arithmetic expression uses the same syntax, precedence, and
      associativity of expression of the C language.  All the integral
      operators, other than ++, --, ?:, and , are supported.  Variables can
      be referenced by name within an arithmetic expression without using
      the parameter substitution syntax.  When a variable is referenced, its
      value is evaluated as an arithmetic expression.

      An internal integer representation of a variable can be specified with
      the -i option of the typeset special command.  Arithmetic evaluation
      is performed on the value of each assignment to a variable with the -i
      attribute.  If you do not specify an arithmetic base, the first
      assignment to the variable determines the arithmetic base.  This base
      is used when parameter substitution occurs.

      Since many of the arithmetic operators require quoting, an alternative
      form of the let command is provided.  For any command beginning with
      ((, all characters until the matching )) are treated as a quoted
      expression.  More precisely, ((...)) is equivalent to let "...".

    Prompting    [Toc]    [Back]
      When used interactively, the shell prompts with the value of PS1
      before reading a command.  If at any time a new-line is typed and
      further input is needed to complete a command, the secondary prompt
      (the value of PS2) is issued.

    Conditional Expressions.    [Toc]    [Back]
      A conditional expression is used with the [[ compound command to test
      attributes of files and to compare strings.  Word splitting and file
      name generation are not performed on the words between [[ and ]].
      Each expression can be constructed from one or more of the following
      unary or binary expressions:

           -a file             True if file exists.




 Hewlett-Packard Company           - 12 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




           -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.
           -f file             True if file exists and is an ordinary file.
           -g file             True if file exists and is has its setgid bit
                               set.
           -h file             True if file exists and is a a symbolic link.
           -k file             True if file exists and is has its sticky bit
                               set.
           -n string           True if length of string is non-zero.
           -o option           True if option named option is on.
           -p file             True if file exists and is a fifo special
                               file or a pipe.
           -r file             True if file exists and is readable by
                               current process.
           -s file             True if file exists and has size greater than
                               zero.
           -t fildes           True if file descriptor number fildes is open
                               and associated with a terminal device.
           -u file             True if file exists and is has its setuid bit
                               set.
           -w file             True if file exists and is writable by
                               current process.
           -x file             True if file exists and is executable by
                               current process.  If file exists and is a
                               directory, the current process has permission
                               to search in the directory.
           -z string           True if length of string is zero.
           -L file             True if file exists and is a symbolic link.
           -O file             True if file exists and is owned by the
                               effective user ID of this process.
           -G file             True if file exists and its group matches the
                               effective group ID of this process.
           -S file             True if file exists and is a socket.
           file1 -nt file2     True if file1 exists and is newer than file2.
           file1 -ot file2     True if file1 exists and is older than file2.
           file1 -ef file2     True if file1 and file2 exist and refer to
                               the same file.
           string = pattern    True if string matches pattern.
           string != pattern   True if string does not match pattern.
           string1 < string2   True if string1 comes before string2 based on
                               ASCII value of their characters.
           string1 > string2   True if string1 comes after string2 based on
                               ASCII value of their characters.
           exp1 -eq exp2       True if exp1 is equal to exp2.
           exp1 -ne exp2       True if exp1 is not equal to exp2.
           exp1 -lt exp2       True if exp1 is less than exp2.
           exp1 -gt exp2       True if exp1 is greater than exp2.




 Hewlett-Packard Company           - 13 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




           exp1 -le exp2       True if exp1 is less than or equal to exp2.
           exp1 -ge exp2       True if exp1 is greater than or equal to
                               exp2.

      A compound expression can be constructed from these primitives by
      using any of the following, listed in decreasing order of precedence.

           (expression)                       True, if expression is true.
                                              Used to group expressions.
           ! expression                       True if expression is false.
           expression1 && expression2         True, if expression1 and
                                              expression2 are both true.
           expression1 || expression2         True, if either expression1 or
                                              expression2 is true.

    Input/Output
      Before a command is executed, its input and output can be redirected
      using a special notation interpreted by the shell.  The following can
      appear anywhere in a simple-command or can precede or follow a command
      and are not passed on to the invoked command.  Command and parameter
      substitution occurs before word or digit is used, except as noted
      below.  File name generation occurs only if the pattern matches a
      single file and blank interpretation is not performed.

           <word          Use file word as standard input (file descriptor
                          0).

           >word          Use file word as standard output (file descriptor
                          1).  If the file does not exist, it is created.
                          If the file exists, and the noclobber option is
                          on, an error occurs; otherwise, the file is
                          truncated to zero length.

           >|word         Sames as >, except that it overrides the noclobber
                          option.

           >>word         Use file word as standard output.  If the file
                          exists, output is appended to it (by first
                          searching for the end-of-file); otherwise, the
                          file is created.

           <>word         Open file word for reading and writing as standard
                          input.  If the file does not exist it is created.

           <<[-]word      The shell input is read up to a line that matches
                          word, or to an end-of-file.  No parameter
                          substitution, command substitution, or file name
                          generation is performed on word.  The resulting
                          document, called a here-document, becomes the
                          standard input.  If any character of word is
                          quoted, no interpretation is placed upon the



 Hewlett-Packard Company           - 14 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




                          characters of the document.  Otherwise, parameter
                          and command substitution occurs, \new-line is
                          ignored, and \ must be used to quote the
                          characters \, $, `, and the first character of
                          word.  If - is appended to <<, all leading tabs
                          are stripped from word and from the document.

           <&digit        The standard input is duplicated from file
                          descriptor digit (see dup(2)).

           >&digit        The standard output is duplicated to file
                          descriptor digit (see dup(2)).

           <&-            The standard input is closed.

           >&-            The standard output is closed.

           <&p            The input from the co-process is moved to standard
                          input.

           >&p            The output to the co-process is moved to standard
                          output.

      If one of the above is preceded by a digit, the file descriptor number
      cited is that specified by the digit (instead of the default 0 or 1).
      For example:

           ... 2>&1

      means file descriptor 2 is to be opened for writing as a duplicate of
      file descriptor 1.

      Redirection order is significant because the shell evaluates
      redirections referencing file descriptors in terms of the currently
      open file associated with the specified file descriptor at the time of
      evaluation.  For example:

           ...  1>fname 2>&1

      first assigns file descriptor 1 (standard output) to file  fname ,
      then assigns file descriptor 2 (standard error) to the file assigned
      to file descriptor 1; i.e., fname.  On the other hand, if the order of
      redirection is reversed as follows:

           ...  2>&1 1>fname

      file descriptor 2 is assigned to the current standard output (user
      terminal unless a different assignment is inherited).  File descriptor
      1 is then reassigned to file fname without changing the assignment of
      file descriptor 2.




 Hewlett-Packard Company           - 15 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      The input and output of a co-process can be moved to a numbered file
      descriptor allowing other commands to write to them and read from them
      using the above redirection operators.  If the input of the current
      co-process is moved to a numbered file descriptor, another co-process
      can be started.

      If a command is followed by & and job control is inactive, the default
      standard input for the command is the empty file /dev/null.
      Otherwise, the environment for the execution of a command contains the
      file descriptors of the invoking shell as modified by input/output
      specifications.

    Environment    [Toc]    [Back]
      The environment (see environ(5)) is a list of name-value pairs passed
      to an executed program much like a normal argument list.  The names
      must be identifiers and the values are character strings.  The shell
      interacts with the environment in several ways.  When invoked, the
      shell scans the environment and creates a parameter for each name
      found, gives it the corresponding value, and marks it export.
      Executed commands inherit the environment.  If the user modifies the
      values of these parameters or creates new ones by using the export or
      typeset -x commands, the values become part of the environment.  The
      environment seen by any executed command is thus composed of any
      name-value pairs originally inherited by the shell whose values can be
      modified by the current shell, plus any additions which must be noted
      in export or typeset -x commands.

      The environment for any simple-command or function can be augmented by
      prefixing it with one or more parameter assignments.  A parameter
      assignment argument takes the form identifier=value.  For example,

           TERM=450 cmd args

      and

           (export TERM; TERM=450; cmd args)

      are equivalent (as far as the above execution of cmd is concerned
      except for special commands listed below that are preceded by a
      percent sign).

      If the -k option is set, all parameter assignment arguments are placed
      in the environment, even if they occur after the command name.  The
      following echo statement prints a=b c.  After the -k option is set,
      the second echo statement prints only c:

           echo a=b c
           set -k
           echo a=b c





 Hewlett-Packard Company           - 16 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      This feature is intended for use with scripts written for early
      versions of the shell, and its use in new scripts is strongly
      discouraged.  It is likely to disappear someday.

    Functions    [Toc]    [Back]
      The function keyword (described in the Commands section above) is used
      to define shell functions.  Shell functions are read and stored
      internally.  Alias names are resolved when the function is read.
      Functions are executed like commands, with the arguments passed as
      positional parameters (see Execution below).

      Functions execute in the same process as the caller except that
      command substitution of a function creates a new process.  Functions
      share all files and present working directory with the caller.  Traps
      caught by the caller are reset to their default action inside the
      function.  If a function does not catch or specifically ignore a trap
      condition, the function terminates and the condition is passed on to
      the caller.  A trap on EXIT set inside a function is executed after
      the function completes in the environment of the caller.  Ordinarily,
      variables are shared between the calling program and the function.
      However, the typeset special command used within a function defines
      local variables whose scope includes the current function and all
      functions it calls.

      The special command return is used to return from function calls.
      Errors within functions return control to the caller.

      Function identifiers can be listed with the +f option of the typeset
      special command.  Function identifiers and the associated text of the
      functions can be listed with the -f option.  Functions can be
      undefined with the -f option of the unset special command.

      Ordinarily, functions are unset when the shell executes a shell
      script.  The -xf option of the typeset command allows a function to be
      exported to scripts that are executed without reinvoking the shell.
      Functions that must be defined across separate invocations of the
      shell should be placed in the ENV file.

    Jobs    [Toc]    [Back]
      If the monitor option of the set command is turned on, an interactive
      shell associates a job with each pipeline.  It keeps a table of
      current jobs, printed by the jobs command, and assigns them small
      integer numbers.  When a job is started asynchronously with &, the
      shell prints a line resembling:

           [1] 1234

      indicating that job number 1 was started asynchronously and had one
      (top-level) process whose process ID was 1234.





 Hewlett-Packard Company           - 17 -   HP-UX 11i Version 2: August 2003






 ksh(1)                                                               ksh(1)




      If you are running a job and want to do something else, type the
      suspend character (usually ^Z (Ctrl-Z)) to send a STOP signal to the
      current job.  The shell then indicates that the job has been
      `Stopped', and prints another prompt.  The state of this job can be
      manipulated by using the bg command to put it in the background,
      running other commands (while it is stopped or running in the
      background), and eventually restarting or returning the job to the
      foreground by using the fg command.  A ^Z takes effect immediately and
      resembles an interrupt, since pending output and unread input are
      discarded when ^Z is typed.

      A job run in the background stops if it tries to read from the
      terminal.  Background jobs normally are allowed to produce output, but
      can be disabled by giving the stty tostop command.  If the user s

 Similar pages
Name OS Title
sh IRIX a standard/restricted command and programming language
bsh IRIX shell, the standard/job control command programming language
sh Tru64 The Bourne shell, an interactive command interpreter and command programming language
Rsh Tru64 The Bourne shell, an interactive command interpreter and command programming language
sh Tru64 Shell, the standard command language interpreter (POSIX Shell)
sh Tru64 Shell, the standard command language interpreter
fc HP-UX standard and restricted POSIX.2-conformant command shells
sh-posix HP-UX standard and restricted POSIX.2-conformant command shells
fg HP-UX standard and restricted POSIX.2-conformant command shells
unalias HP-UX standard and restricted POSIX.2-conformant command shells
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service