UNIX in a Nutshell: System V Edition

UNIX in a Nutshell: System V EditionSearch this book
Previous: 5.1 Overview of FeaturesChapter 5
The C Shell
Next: 5.3 Variables
 

5.2 Syntax

This subsection describes the many symbols peculiar to the C shell. The topics are arranged as follows:

5.2.1 Special Files

~/.cshrcExecuted at each instance of shell.
~/.historyHistory list saved from previous login.
~/.loginExecuted by login shell after .cshrc at login.
~/.logoutExecuted by login shell at logout.
/etc/passwdSource of home directories for ~name abbreviations.

5.2.2 Filename Metacharacters

*Match any string of zero 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.
~nameHome directory of user name.

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

5.2.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:

;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 tabWord separators.

The characters below can be used for quoting:

" "

Everything between " and " is taken literally, except for the following characters that 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.

' '

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 !).

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

5.2.4 Command Forms

cmd &Execute cmd in background.
cmd1 ; cmd2Command sequence; execute multiple cmds on the same line.
(cmd1 ; cmd2)Subshell; treat cmd1 and cmd2 as a command group.
cmd1 | cmd2Pipe; use output from cmd1 as input to cmd2.
cmd1 `cmd2`Command substitution; use cmd2 output as arguments to cmd1.
cmd1 && cmd2AND; execute cmd1 and then (if cmd1 succeeds) cmd2.
cmd1 || cmd2OR; execute either cmd1 or (if cmd1 fails) cmd2.

5.2.4.1 Examples

% nroff file &	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	otherwise, echo an error message.

5.2.5 Redirection Forms

FileCommonTypical
DescriptorNameAbbreviationDefault
0Standard InputstdinKeyboard
1Standard OutputstdoutTerminal
2Standard ErrorstderrTerminal

The usual input source or output destination can be changed as follows:

5.2.5.1 Simple Redirection

cmd > fileSend output of cmd to file (overwrite).
cmd >! fileSame as above, even if noclobber is set.
cmd >> fileSend output of cmd to file (append).
cmd >>! fileSame as above, but create file even if noclobber is set.
cmd < fileTake 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 is usually 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.

5.2.5.2 Multiple Redirection

cmd >& fileSend both standard output and standard error to file.
cmd >&! fileSame as above, even if noclobber is set.
cmd >>& fileAppend standard output and standard error to end of file.
cmd >>&! fileSame as above, but create file even if noclobber is set.
cmd1 |& cmd2Pipe standard error together with standard output.
(cmd > f1) >& f2Send standard output to file f1; standard error to file f2.
cmd | tee files

Send output of cmd to standard output (usually the terminal) and to files. (See the example in Section 2 under tee.)

5.2.5.3 Examples

% cat part1 > book
% cat part2 part3 >> book
% mail tim < report
% cc calc.c >& error_out
% cc newcalc.c >&! error_out
% grep UNIX ch* |& pr
% (find / -print > filelist) >& no_access

% sed 's/^/XX /g' << "END_ARCHIVE"
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"
XX This is often how a shell archive is "wrapped",
XX bundling text for distribution.  You would normally
XX run sed from a shell program, not from the command line.


Previous: 5.1 Overview of FeaturesUNIX in a Nutshell: System V EditionNext: 5.3 Variables
5.1 Overview of FeaturesBook Index5.3 Variables

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System