Category:C Shell

From Rosetta Code
(Redirected from Csh)
Language
C Shell
This programming language may be used to instruct a computer to perform a task.
Execution method: Interpreted
Lang tag(s): csh
See Also:


Listed below are all of the tasks on Rosetta Code which have been solved using C Shell.
Your Help Needed
If you know C Shell, please write code for some of the tasks not implemented in C Shell.
C Shell is an implementation of UNIX Shell. Other implementations of UNIX Shell.

csh was the shell that William Joy wrote for BSD. csh accepted the same Unix commands as other shells, but had a very different syntax (for variable assignments, control flow, and such). csh is not compatible with the Bourne Shell.

BSD keeps the C Shell at /bin/csh. Hashbang lines should use the -f option:

#!/bin/csh -f

Reputation[edit]

C Shell is obsolete. Most scriptwriters prefer a Bourne-compatible shell, and few users want to learn two flavors of shells. C Shell introduced tilde expansion (ls ~), job control, command history, and aliases, but POSIX shells now have all of those.

Csh Programming Considered Harmful and Top Ten Reasons not to use the C shell give multiple reasons to avoid C Shell.

tcsh is a later version that fixed many of the problems with csh. It is still actively, if intermittently, maintained and has a following such as on Solaris.

Syntax[edit]

The manual for csh(1) claims that C Shell has "a C-like syntax". Several other languages have a C-like syntax, including Java and Pike, and Unix utilities AWK and bc. C Shell is less like C than those other languages.

This example prints a Hailstone sequence from 13.

C C Shell
#include <stdio.h>
 
int
main()
{
int n;
 
n = 13;
printf("%d\n", n);
while (n != 1) {
if (n % 2)
n = 3 * n + 1;
else
n /= 2;
 
printf("%d\n", n);
}
 
return 0;
}
 
 
 
 
 
 
 
@ n = 13
echo $n
while ($n != 1)
if ($n % 2) then
@ n = 3 * $n + 1
else
@ n /= 2
endif
echo $n
end
 
 
 

C Shell has no braces {} to group the commands. Strange keywords are then, endif and end. Expressions have $n instead of n. Assignments use @ n.

C Shell has "a C-like syntax" because C Shell is more like C than Bourne Shell.

Bourne Shell C Shell
n=13
echo $n
while test $n -ne 1; do
if expr $n % 2 >/dev/null; then
n=`expr 3 \* $n + 1`
else
n=`expr $n / 2`
fi
echo $n
done
@ n = 13
echo $n
while ($n != 1)
if ($n % 2) then
@ n = 3 * $n + 1
else
@ n /= 2
endif
echo $n
end

Bourne Shell requires test or expr to evaluate expressions. C Shell has built-in expressions, so the Hailstone sequence comes more easily. These expressions have a stupid quirk: all operators are right-associative, so 10 - 3 - 2 acts like 10 - (3 - 2). The fix is to use parentheses.

% @ n = 10 - 3 - 2
% echo $n
9
% @ n = (10 - 3) - 2
% echo $n
5

Links[edit]

Subcategories

This category has the following 3 subcategories, out of 3 total.