if statement
When there is only one statement in the true block, and there is no false block, the statement can be all on one line:
if ( expression ) command
The complete if else statement is:
if ( expression ) then
commands for true evaluation
else
commands for false evaluation
endif
The if … then must be on the same line
The if else if statement is:
if ( expression1 ) then
commands for case 1
else if ( expression2 ) then
commands for case 2
else
commands for default case
endif
There can be as many else if cases as necessary
In each case, the expression has to evaluate to true or false
When the expression is a utility or sequence of utilities that the shell must evaluate, then the expression must be surrounded by { } and if there is output to the utility, then the output should be redirected to /dev/null
if { ( commands to be evaluated to true/false ) } then
commands for true evaluation
else
commands for false evaluation
endif
By surrounding the if condition with { }, tcsh will run the commands and return true or false so it can be used by the if statement. The format ( `commands` ) will not be evaluated correctly for true / false.
For example:
if { ( who | grep $userid > /dev/null ) } then
echo “$userid is logged in”
else
echo “$userid is not logged in”
endif
Without the redirection to /dev/null, if the userid is found in the who output, the corresponding line of the who output will be printed to screen
Similar to the C language, the switch statement is used to select one choice out of many choices
switch ( variable )
case value1:
commands
breaksw
case value2:
commands
breaksw
default:
commands
endsw
When variable matches value1 or value2, the appropriate commands run. If variable does not match any given value, the commands of the default case run
The foreach loop
Format
foreach variable ( list )
commands
end
Examples
foreach file ( `ls`)
echo $file print filenames in current directory
end
set nums = (2 4 6 8 )
foreach val ($nums)
echo $val print all values of nums array,
end one per line
The while loop
Format
while ( expression )
commands
end
Example
@ num = 10
while ( $num > 0 )
echo $num print 10 to 1, one number per line
@ num--
end
There is no support for functions in tcsh
Signal handling is with the built-in function onintr, for on interrupt
onintr only works with control-c
There are 3 ways to use onintr:
onintr label Go to code at label when there is a control-c signal
onintr - Disable control-c signal
onintr Reset to the default signal handling for interrupt..label:.commands
exit 1 # or: goto label2
There is no handling support for other signals for tcsh. It is assumed that you will write a C program if you need to handle anything more complex than control-c from the keyboard. C has many libraries to support signal handling at a finer detail than any of the shells do
The shells we covered are 3 of the most common modern shells
bash is the most commonly used shell due to the popularity of Linux and the many features of bash. In addition the Mac’s default shell is also the bash shell.
ksh is similar to bash and came before bash, when Linux was not yet widely used. Therefore Unix programmers and those who came from a Unix environment prefer ksh.
tcsh is preferred by die hard csh fans because it is most similar to csh. csh at one time was the only one of two choices of shells (the other being the Bourne shell), so as a result an entire ‘generation’ of technical people ‘grew up’ with csh. Many csh fans nowaday have converted to bash, but there are still some supporters for tcsh.
Of course there are many other *nix shells, with zsh being one of the prominent ones
You can always choose which shell you want to use and work with. But even if you need to write a script for a different shell than what you normally use, it’s mostly a matter of changes in syntax only. The general concepts of shell scripting are the same