Operating System‎ > ‎Linux‎ > ‎Linux Shell Script‎ > ‎

10. tc Shell (Part 2)

tc Shell (Part 2)

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
    commands for false evaluation
    • 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
    commands for default case
  • 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
    commands for false evaluation
  • 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” 
    echo “$userid is not logged in”
  • 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

switch statement

  • Similar to the C language, the switch statement is used to select one choice out of many choices
switch ( variable )  
case  value1:
case  value2: 
  • 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 )
  • Examples
foreach   file   ( `ls`)
    echo  $file               print filenames in current directory

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 )
  • Example
@ num = 10
while  ( $num > 0 )
    echo  $num print 10 to 1, one number per line
    @ num--


  • 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

Final Thoughts on Shells

  • 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