The basic idea of scripting with the shell is that you have a set of commands, and perhaps some control statements, which make the shell do a series of commands. Basically there is no difference between a script and a program.
In particular, csh can be good for writing short scripts to run test sequences. The following quote motivates using scripts in this way :
There are three ways:
cshdirectly and then enter script commands interactively.
% csh myScript ...
where '...' is replaced by a sequence
of arguments. The shell places these arguments in the variable
argv and then begins to read commands from the script.
#!/usr/bin/csh ...where '...' is again the arguments to the shell. The only argument we will mention here is -f which stops the shell script from sourcing your ~/.cshrc.
You can then execute the file directly, assuming it has been granted "execute" permissons.
# This line does nothing /usr/local/bin/ls # This line runs ls, but this is a comment
set MY_EDITOR /usr/local/bin/emacs)
set DATE = 'date')
#!/usr/bin/csh echo "Your display is $DISPLAY"
$?nameexpands to `1' if name is set, or to `0' if name is not set. It is the fundamental mechanism used for checking whether particular variables have been assigned values. All other forms of reference to undefined variables cause errors.
gives access to the nth component of the variable 'arrayName'
expands to the number of elements in the variable name.
joe@cab104:~> csh % set myArray = (a b c) % echo $?myArray 1 % echo $#myArray 3 % echo $myArray b % unset myArray % echo $?myArray 0 % echo $myArray Undefined variable: myArray. %
#!/usr/bin/csh echo "You entered $#argv arguments" echo "1st one= $1" # method 1 echo "2nd one= $argv" # method 2
And the output looks:
justin@cab104:~>./myScript hi there You entered 2 arguments 1st one= hi 2nd one= there
if (expr) then commands else if (expr) then commands else commands endif
while (expr) commands end
foreach vrbl (list) commands end
switch (string) case pattern: commands breaksw case pattern: . . default: commands endsw
repeat count command
#!/usr/bin/csh repeat 2 echo Greetings! echo foreach i (1 3 five) echo "i = [$i]" end echo set BEST_EDITOR = "emacs" switch ($EDITOR) case $BEST_EDITOR: echo "You are cool" breaksw default : echo "You are not as cool as an emacs user" breaksw endsw
And the output looks like:
justin@cab104:~>./myScript Greetings! Greetings! i =  i =  i = [five] You are cool
where `?' is replaced by a number of single characters:
|-r file||-- test if file can be read|
|-w file||-- test if file can be written to|
|-x file||-- test if file can be executed|
|-d file||-- test if file is a directory|
|-e file||-- test if file exists|
|-o file||-- test if you are the owner of file|
|-z file||-- test if file is empty|
|-f file||-- test if file is an ordinary file, that is, not a direcotry, not a character special, and not a block special file|
/usr/local/bin/lsin place of just plain
#!/usr/bin/csh set LS = /usr/local/bin/ls $LS