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.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 (shortcircuit).

  Logical OR (shortcircuit).

{ 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.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.

