home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


UNIX in a Nutshell: System V Edition

UNIX in a Nutshell: System V EditionSearch this book
Previous: 5.1 Overview of Features Chapter 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:

  • Special files

  • Filename metacharacters

  • Quoting

  • Command forms

  • Redirection forms

5.2.1 Special Files

~/.cshrc Executed at each instance of shell.
~/.history History list saved from previous login.
~/.login Executed by login shell after .cshrc at login.
~/.logout Executed by login shell at logout.
/etc/passwd Source 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.
~ name Home 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 tab Word 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 ; cmd2 Command sequence; execute multiple cmd s 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; use cmd2 output as arguments to cmd1 .
cmd1 && cmd2 AND; execute cmd1 and then (if cmd1 succeeds) cmd2 .
cmd1 || cmd2 OR; 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

File Common Typical
Descriptor Name Abbreviation Default
0 Standard Input stdin Keyboard
1 Standard Output stdout Terminal
2 Standard Error stderr Terminal

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

5.2.5.1 Simple Redirection

cmd > file Send output of cmd to file (overwrite).
cmd >! file Same as above, even if noclobber is set.
cmd >> file Send output of cmd to file (append).
cmd >>! file Same as above, but create file 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 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 >& file Send both standard output and standard error to file .
cmd >&! file Same as above, even if noclobber is set.
cmd >>& file Append standard output and standard error to end of file .
cmd >>&! file Same as above, but create file even if noclobber is set.
cmd1 |& cmd2 Pipe standard error together with standard output.
( cmd > f1 ) >& f2 Send 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 Features UNIX in a Nutshell: System V Edition Next: 5.3 Variables
5.1 Overview of Features Book Index 5.3 Variables

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