Expressions
Expressions are used in @, if, and while statements to perform arithmetic, string comparisons, file testing, and so on. exit and set also specify expressions, as can the tcsh built-in command filetest. Expressions are formed by combining variables and constants with operators that resemble those in the C developing language. Operator precedence is the same as in C but can be remembered as follows:
- * / %
- + -
Group all other expressions inside parentheses. Parentheses are required if the expression contains <, >, &, or |.
Operators
Operators can be one of the following types:
Assignment operators
Operator
| Description
|
=
| Assign value.
|
+= -=
| Reassign after addition/subtraction.
|
*= /= %=
| Reassign after multiplication/division/remainder.
|
&= ^= |=
| Reassign after bitwise AND/XOR/OR.
|
++
| Increment.
|
--
| Decrement. |
Arithmetic operators
Operator
| Description
|
* / %
| Multiplication; integer division; modulus (remainder)
|
+ -
| Addition; subtraction |
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.
|
||
| Logical OR.
|
{ 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. |
Comparison operators
Operator
| Description
|
== !=
| Equality; inequality
|
<= >=
| Less than or equal to; greater than or equal to
|
< >
| Less than; greater than |
File inquiry operators
Command substitution and filename expansion are performed on file before the test is performed. tcsh permits operators to be combined (e.g., -ef). The following is a list of the valid file inquiry operators:
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 0 size.
|
!
| Reverse the sense of any preceding inquiry. |
Some additional operators specific to tcsh are:
Operator
| Description
|
-b file
| The file is a block special file.
|
-c file
| The file is a character special file.
|
-g file
| The file's set-group-ID bit is set.
|
-k file
| The file's sticky bit is set.
|
-l file
| The file is a symbolic link.
|
-L file
| Apply any remaining operators to symbolic link, not the file it points to.
|
-p file
| The file is a named pipe (FIFO).
|
-s file
| The file has nonzero size.
|
-S file
| The file is a socket special file.
|
-t file
| file is a digit and is an open file descriptor for a terminal device.
|
-u file
| The file's set-user-ID bit is set.
|
-X file
| The file is executable and is in the path or is a shell built-in. |
Finally, tcsh provides the following operators, which return other kinds of information:
Operator
| Description
|
-A[:] file
| Last time file was accessed, as the number of seconds since the Epoch. With a colon (:), the result is in timestamp format.
|
-C[:] file
| Last time inode was modified. With a colon (:), the result is in timestamp format.
|
-D file
| Device number.
|
-F file
| Composite file identifier, in the form device:inode.
|
-G[:] file
| Numeric group ID for the file. With a colon (:), the result is the group name if known; otherwise, the numeric group ID.
|
-I file
| Inode number.
|
-L file
| The name of the file pointed to by symbolic link file.
|
-M[:] file
| Last time file was modified. With a colon (:), the result is in timestamp format.
|
-N file
| Number of hard links.
|
-P[:] file
| Permissions in octal, without leading 0. With a colon (:), the result includes a leading 0.
|
-P mode[:] file
| Equivalent to -P file ANDed to mode. With a colon (:), the result includes a leading 0.
|
-U[:] file
| Numeric user ID of the file's owner. With a colon (:), the result is the username if known, otherwise the numeric user ID.
|
-Z file
| The file's size, in bytes. |
Examples
The 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 (-f $argv[1])
| If the first argument is a plain file. . .
|
if (! -d $tmpdir)
| If tmpdir is not a directory. . . |