5.4. Expressions
Expressions are used in @ (the C shell math operator),
if, and while
statements to perform arithmetic, string comparisons, file testing, etc.
exit and set can also specify expressions.
Expressions are formed by combining variables and constants with
operators that resemble those in the C programming language.
Operator precedence is the same as in C.
It is easiest to just remember the following precedence rules:
* / %
+ -
Group all other expressions inside () s; parentheses are required if the expression contains
<,
<,
&,
or
|
5.4.1. Operators
Operators can be one of the following types.
5.4.1.1. Assignment operators
Operator | Description |
= | Assign value. |
+= -= | Reassign after addition/subtraction.
|
*= /= %= | Reassign after multiplication/division/remainder.
|
&= ^= |= | Reassign after bitwise AND/XOR/OR.
|
++ | Increment.
|
-- | Decrement.
|
5.4.1.2. Arithmetic operators
Operator | Description |
* / % | Multiplication; integer division; modulus (remainder). |
+ - | Addition; subtraction.
|
5.4.1.3. Bitwise and logical operators
Operator | Description |
~ | Binary inversion (one's complement). |
! | Logical negation.
|
<< >> | Bitwise left shift; bitwise right shift.
|
& | Bitwise AND.
|
^ | Bitwise exclusive OR.
|
| | Bitwise OR.
|
&& | Logical AND (short-circuit).
|
|| | Logical OR (short-circuit).
|
{ command } | Return 1 if command is successful; 0 otherwise.
Note that this is the opposite of command's normal
return code.
The $status variable may be more practical.
|
5.4.1.4. Comparison operators
Operator | Description |
== != | Equality; inequality. |
<= >= | Less than or equal to; greater than or equal to.
|
< > | Less than; greater than.
|
=~ | String on left matches a filename pattern
containing *, ?,
or [...].
|
!~ | String on left does not match a filename pattern
containing *, ?,
or [...].
|
5.4.1.5. File inquiry operatorsCommand substitution and filename expansion are performed on
file before the test is performed.
Operator | Description |
-d file | The file is a directory. |
-e file | The file exists. |
-f file | The file is a plain file. |
-o file | The user owns the file. |
-r file | The user has read permission. |
-w file | The user has write permission. |
-x file | The user has execute permission. |
-z file | The file has zero size. |
! | Reverse the sense of any inquiry above. |
5.4.2. ExamplesThe following examples show @ commands and assume n = 4.
Expression | Value of $x |
@ x = ($n > 10 || $n < 5) | 1 |
@ x = ($n >= 0 && $n < 3) | 0 |
@ x = ($n << 2) | 16 |
@ x = ($n >> 2) | 1 |
@ x = $n % 2 | 0 |
@ x = $n % 3 | 1 |
The following examples show the first line of
if or while statements.
Expression | Meaning |
while ($#argv != 0) | While there are arguments ... |
if ($today[1] == "Fri") | If the first word is “Fri”... |
if ($file !~ *.[zZ]) | If the file doesn't end with .z
or .Z ...
|
if ($argv[1] =~ chap?) | If the first argument is chap followed
by a single character ...
|
if (-f $argv[1]) | If the first argument is a plain file ... |
if (! -d $tmpdir) | If $tmpdir is not a directory ... |
| | | 5.3. Variables | | 5.5. Command History |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|
|