Book HomeLinux in a NutshellSearch this book

8.3. Syntax

This section describes the many symbols peculiar to csh and tcsh. The topics are arranged as follows:

8.3.1. Special Files

Filename Description

~/.cshrc or ~/.tcshrc

Executed at each instance of shell startup. For tcsh, if no ~/.tcshrc, uses ~/.cshrc if present.

~/.login Executed by login shell after .cshrc at login.
~/.cshdirs

Executed by login shell after .login (tcsh).

~/.logout Executed by login shell at logout.
/etc/passwd Source of home directories for ~name abbreviations.

8.3.2. Filename Metacharacters

Characters Meaning
* Match any string of 0 or more characters.
? Match any single character.
[abc...]

Match any one of the enclosed characters; a hyphen can be used to specify a range (e.g., a-z, A-Z, 0-9).

{abc,xxx,...}

Expand each comma-separated string inside braces.

~ Home directory for the current user.
~name Home directory of user name.

8.3.2.1. Examples

% ls new*          Match new and new.1
% cat ch?          Match ch9 but not ch10
% vi [D-R]*        Match files that begin with uppercase D through R
% ls {ch,app}?     Expand, then match ch1, ch2, app1, app2
% cd ~tom          Change to tom's home directory

8.3.3. Quoting

Quoting disables a character's special meaning and allows it to be used literally, as itself. The following characters have special meaning to the C shell:

Characters Description
; Command separator
& Background execution
( ) Command grouping
| Pipe
* ? [ ] ~ Filename metacharacters
{ }

String expansion characters (usually don't require quoting)

> < & ! Redirection symbols
! ^ History substitution, quick substitution
" ' \ Used in quoting other characters
` Command substitution
$ Variable substitution

newline space tab

Word separators

The characters that follow can be used for quoting:

" "

Everything between " and " is taken literally, except for the following characters, which keep their special meaning:

$

Variable substitution will occur.

`

Command substitution will occur.

"

This marks the end of the double quote.

\

Escape next character.

!

The history character.

newline

The newline character.

' '

Everything between ' and ' is taken literally except for ! (history) and another ', and newline.

\

The character following a \ is taken literally. Use within " " to escape ", $, and `. Often used to escape itself, spaces, or newlines. Always needed to escape a history character (usually !).

8.3.3.1. Examples


% echo 'Single quotes "protect" double quotes'
Single quotes "protect" double quotes

% echo "Well, isn't that "\""special?"\"
Well, isn't that "special"?

% echo "You have `ls|wc -l` files in `pwd`"
You have 43 files in /home/bob

% echo The value of \$x is $x
The value of $x is 100

8.3.4. Command Forms

Command Action
cmd &

Execute cmd in background.

cmd1 ; cmd2

Command sequence; execute multiple cmds on the same line.

(cmd1 ; cmd2)

Subshell; treat cmd1 and cmd2 as a command group.

cmd1 | cmd2

Pipe; use output from cmd1 as input to cmd2.

cmd1 `cmd2`

Command substitution; run cmd2 first and use its output as arguments to cmd1.

cmd1 || cmd2

OR; execute either cmd1 or (if cmd1 fails) cmd2.

cmd1 && cmd2

AND; execute cmd1 and then (if cmd1 succeeds) cmd2.

8.3.4.1. Examples

% nroff file > output &               Format in the background
% cd; ls                              Execute sequentially
% (date; who; pwd) > logfile          All output is redirected
% sort file | pr -3 | lp              Sort file, page output, then print
% vi `grep -l ifdef *.c`              Edit files found by grep
% egrep '(yes|no)' `cat list`         Specify a list of files to search
% grep XX file && lp file             Print file if it contains the pattern
% grep XX file || echo XX not found   Echo an error message if XX not found

8.3.5. Redirection Forms

File Descriptor

Name

Common Abbreviation

Typical Default

0 Standard input stdin Keyboard
1 Standard output stdout Screen
2 Standard error stderr Screen

The usual input source or output destination can be changed with redirection commands listed in the following sections.

8.3.5.1. Simple redirection

Command Action
cmd > file Send output of cmd to file (overwrite).
cmd >! file

Same as preceding, even if noclobber is set.

cmd >> file Send output of cmd to file (append).
cmd>>! file

Same as preceding, even if noclobber is set.

cmd < file Take input for cmd from file.
cmd << text

Read standard input up to a line identical to text (text can be stored in a shell variable). Input usually is typed on the screen or in the shell program. Commands that typically use this syntax include cat, echo, ex, and sed. If text is enclosed in quotes, standard input will not undergo variable substitution, command substitution, etc.

8.3.5.2. Multiple redirection

Command Action
cmd >& file

Send both standard output and standard error to file.

cmd >&! file

Same as preceding, even if noclobber is set.

cmd >>& file

Append standard output and standard error to end of file.

cmd >>&! file

Same as preceding, even if noclobber is set.

cmd1 |& cmd2

Pipe standard error together with standard output.

(cmd> f1) >& f2

Send standard output to file f1 and standard error to file f2.

cmd | tee files

Send output of cmd to standard output (usually the screen) and to files. (See the example in Chapter 3, "Linux Commands" under tee.)

8.3.5.3. Examples

% cat part1 > book                               Copy part1 to book
% cat part2 part3 >> book                        Append parts 2 and 3 to same file as part1
% mail tim < report                              Take input to message from report
% cc calc.c >& error_out                         Store all messages, including errors
% cc newcalc.c >&! error_out                     Overwrite old file
% grep Unix ch* |& pr                            Pipe all messages, including errors
% (find / -print > filelist) >& no_access        Separate error messages from list of files
% sed 's/^/XX /' << "END_ARCHIVE"                Supply text right after command
This is often how a shell archive is "wrapped",
bundling text for distribution. You would normally
run sed from a shell program, not from the command line.
"END_ARCHIVE"



Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.