Copyright (C) 2000-2012 |
GNU Info (bashref.info)Conditional ConstructsConditional 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 |