GNU Info

Info Node: (bashref.info)Conditional Constructs

(bashref.info)Conditional Constructs


Next: Command Grouping Prev: Looping Constructs Up: Shell Commands
Enter node , (file) or (file)node

Conditional Constructs
----------------------

`if'
     The syntax of the `if' command is:

          if TEST-COMMANDS; then
            CONSEQUENT-COMMANDS;
          [elif MORE-TEST-COMMANDS; then
            MORE-CONSEQUENTS;]
          [else ALTERNATE-CONSEQUENTS;]
          fi

     The TEST-COMMANDS list is executed, and if its return status is
     zero, the CONSEQUENT-COMMANDS list is executed.  If TEST-COMMANDS
     returns a non-zero status, each `elif' list is executed in turn,
     and if its exit status is zero, the corresponding MORE-CONSEQUENTS
     is executed and the command completes.  If `else
     ALTERNATE-CONSEQUENTS' is present, and the final command in the
     final `if' or `elif' clause has a non-zero exit status, then
     ALTERNATE-CONSEQUENTS is executed.  The return status is the exit
     status of the last command executed, or zero if no condition
     tested true.

`case'
     The syntax of the `case' command is:

          `case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]... esac'

     `case' will selectively execute the COMMAND-LIST corresponding to
     the first PATTERN that matches WORD.  The `|' is used to separate
     multiple patterns, and the `)' operator terminates a pattern list.
     A list of patterns and an associated command-list is known as a
     CLAUSE.  Each clause must be terminated with `;;'.  The WORD
     undergoes tilde expansion, parameter expansion, command
     substitution, arithmetic expansion, and quote removal before
     matching is attempted.  Each PATTERN undergoes tilde expansion,
     parameter expansion, command substitution, and arithmetic
     expansion.

     There may be an arbitrary number of `case' clauses, each terminated
     by a `;;'.  The first pattern that matches determines the
     command-list that is executed.

     Here is an example using `case' in a script that could be used to
     describe one interesting feature of an animal:

          echo -n "Enter the name of an animal: "
          read ANIMAL
          echo -n "The $ANIMAL has "
          case $ANIMAL in
            horse | dog | cat) echo -n "four";;
            man | kangaroo ) echo -n "two";;
            *) echo -n "an unknown number of";;
          esac
          echo " legs."

     The return status is zero if no PATTERN is matched.  Otherwise, the
     return status is the exit status of the COMMAND-LIST executed.

`select'
     The `select' construct allows the easy generation of menus.  It
     has almost the same syntax as the `for' command:

          select NAME [in WORDS ...]; do COMMANDS; done

     The list of words following `in' is expanded, generating a list of
     items.  The set of expanded words is printed on the standard error
     output stream, each preceded by a number.  If the `in WORDS' is
     omitted, the positional parameters are printed, as if `in "$@"'
     had been specifed.  The `PS3' prompt is then displayed and a line
     is read from the standard input.  If the line consists of a number
     corresponding to one of the displayed words, then the value of
     NAME is set to that word.  If the line is empty, the words and
     prompt are displayed again.  If `EOF' is read, the `select'
     command completes.  Any other value read causes NAME to be set to
     null.  The line read is saved in the variable `REPLY'.

     The COMMANDS are executed after each selection until a `break'
     command is executed, at which point the `select' command completes.

     Here is an example that allows the user to pick a filename from the
     current directory, and displays the name and index of the file
     selected.

          select fname in *;
          do
          	echo you picked $fname \($REPLY\)
          	break;
          done

`((...))'
          (( EXPRESSION ))

     The arithmetic EXPRESSION is evaluated according to the rules
     described below (Note: Shell Arithmetic).  If the value of the
     expression is non-zero, the return status is 0; otherwise the
     return status is 1.  This is exactly equivalent to
          let "EXPRESSION"

     Note: Bash Builtins, for a full description of the `let' builtin.

`[[...]]'
          [[ EXPRESSION ]]

     Return a status of 0 or 1 depending on the evaluation of the
     conditional expression EXPRESSION.  Expressions are composed of
     the primaries described below in Note: Bash Conditional
     Expressions.  Word splitting and filename expansion are not
     performed on the words between the `[[' and `]]'; tilde expansion,
     parameter and variable expansion, arithmetic expansion, command
     substitution, process substitution, and quote removal are
     performed.

     When the `==' and `!=' operators are used, the string to the right
     of the operator is considered a pattern and matched according to
     the rules described below in Note: Pattern Matching.  The return
     value is 0 if the string matches or does not match the pattern,
     respectively, and 1 otherwise.  Any part of the pattern may be
     quoted to force it to be matched as a string.

     Expressions may be combined using the following operators, listed
     in decreasing order of precedence:

    `( EXPRESSION )'
          Returns the value of EXPRESSION.  This may be used to
          override the normal precedence of operators.

    `! EXPRESSION'
          True if EXPRESSION is false.

    `EXPRESSION1 && EXPRESSION2'
          True if both EXPRESSION1 and EXPRESSION2 are true.

    `EXPRESSION1 || EXPRESSION2'
          True if either EXPRESSION1 or EXPRESSION2 is true.

     The `&&' and `||' commands do not execute EXPRESSION2 if the value
     of EXPRESSION1 is sufficient to determine the return value of the
     entire conditional expression.


automatically generated by info2www version 1.2.2.9