The C shell's 
brain damage (
47.2
)
 keeps you from using an 
if
 (
47.3
)
 with an 
else
 in an alias. You have to use a 
sourceable script (
10.5
)
. Or that's what I thought until I saw an article by Lloyd Zusman on 
comp.unix.questions
 in December 1987. He'd saved an earlier posting on that group (but without its author's name) that showed how. The trick: use enough backslashes (
\
) and the 
eval
 (
8.10
)
 command.
As an example, here's an alias named 
C
 for 
compiling (
52.8
)
 C programs. It needs the 
executable
 filename (like 
C prog
), not the  source filename (like 
C prog.c
). If you type a filename ending in 
.c
, it complains and quits. Else, it:
Renames any old prog file to prog.old ,
Prints the message 
prog
 SENT TO cc
,
Compiles prog.c ,
And - if there's a prog file (if the compile succeeded)-runs chmod 311 prog to protect the file from accidental reading with a command like cat * or more * .
Your alias doesn't need to be as complicated. But this one shows some tricks, like putting an 
if
 inside the 
if
, that you might want to use. The expressions like 
=~
 and 
-e
 are explained in article 
47.4
.
 Watch your quoting - remember that the shell strips off one level of quoting 
when you set the alias (
10.3
)
 and another during the first pass of the 
eval
. Follow this example and you'll probably be fine:
# COMPILE AND chmod C PROGRAMS; DON'T USE .c ON END OF FILENAME. alias C 'eval "if (\!* =~ *.c) then \\ echo "C quitting: no .c on end of \!* please." \\ else \\ if (-e \!*) mv \!* \!*.old \\ echo \!*.c SENT TO cc \\ cc -s \!*.c -o \!* \\ if (-e \!*) chmod 311 \!* \\ endif"'
-