Category:C Shell

From Rosetta Code
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.
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:

<lang csh>#!/bin/csh -f</lang>

Reputation

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

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
<lang c>#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;

}</lang>

<lang csh>




@ n = 13 echo $n while ($n != 1)

 if ($n % 2) then
   @ n = 3 * $n + 1
 else
   @ n /= 2
 endif
 echo $n

end


</lang>

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
<lang bash>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</lang>

<lang csh>@ n = 13

echo $n while ($n != 1)

 if ($n % 2) then
   @ n = 3 * $n + 1
 else
   @ n /= 2
 endif
 echo $n

end</lang>

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.

<lang csh>% @ n = 10 - 3 - 2 % echo $n 9 % @ n = (10 - 3) - 2 % echo $n 5</lang>

Links