There is a very nice tutorial on scripting with bash on TecAdmin.net. I like the way the material is presented. Below, I will present a tcsh scripting tutorial using a similar structure. I will not go into too much details but just mention how to do something similiar in tcsh .

Links to sections on this page:

  • Hello World
  •     
  • Commandline Arguments
  •     
  • String Comparisons
  • Variables
  •     
  • Include Files
  •     
  • If-else
  • Comments
  •     
  • Shell Commands
  •     
  • For-loop
  • Quotes
  •     
  • User Input
  •     
  • While-loop
  • Debugging
  •     
  • Arithmetic Operations
  •     
  • Case
  • Exit Codes
  •     
  • Numeric Comparisons
  •     
  • Functions
  • Only the first line is different from bash.
    #!/bin/tcsh -f
    
    echo "Hello World"
    Synatx is different from bash. To set a variable's value, must use the keyword set and must use an equal sign (i.e., "=").
    #!/bin/tcsh -f
    
    set NAME = "TecAdmin Tutorials"
    echo $NAME
    
    set launchdate = "Feb 08, 2013"
    echo $launchdate
    Since tcsh does not have functions, all variables are global variables.

    Environment variables can also be accessed directly in tcsh (e.g., $PATH, $SHELL, $HOME, $LANG, $PWD, etc.).

    Single line comment is the same as bash. Tcsh does not support multiple line comments.

    Synatx is the same as bash.

    Unlike bash, you cannot turn debugging on and off inside a tcsh script. But if you have a tcsh script, say, "foo.csh", you can run it in full-trace mode by doing:
        tcsh -xv foo.csh

    Unlike bash, if you execute a pieces of bad code in tcsh, tcsh script will stop running. Test drive the following code to see:
    #!/bin/tcsh -f
    
    rm -f /tmp/tesfile.txt
    echo "hi" > /tmp/tesfile.txt
    ls -l /tmp/tesfile.txt
    chmod 0444 /tmp/tesfile.txt
    ls -l /tmp/tesfile.txt
    echo "hi" > /tmp/tesfile.txt
    echo "Cannot reach this line of code."

    Synatx is a bit different from bash. Things like "$@" and "$?" are not available in tcsh. Commandline arguments can be accessed as $argv[$i] where $i ranges from 1 to the number of commandline arguments (denoted by "$#") and "$#" gives you the number of commandline arguments. Below is a program and stores the commandline arguments in a list and then print the list out.
    #!/bin/tcsh -f
    
    set num_args = $#
    set i = 1
    set list = ( )
    echo "Build the list from commandline arguments..."
    while ($i <= $num_args)
        @ i_minus_1 = $i - 1
        set arg = $argv[$i]
        echo "\targ[$i_minus_1] = $arg"
        set list = ( $list $arg )
        @ i = $i + 1
    end
    echo "Now print the list..."
    foreach f ($list)
        echo "\t$f"
    end

    Synatx is the same as bash.

    Tcsh also uses backquotes to run shell commands in the same way as bash.

    Tcsh syntax is very different from bash. The code below demonstrate how you read a string from the user using "$<":
    #!/bin/tcsh -f
    
    echo -n "Enter a number randomly chosen between 1 and 10: "
    set x = $<
    if ($x < 1 || $x > 10) then
        echo "Invalid input entered: $x"
    else
        echo "You have entered: $x"
    endif

    Tcsh syntax is very different from bash. You must begin a line with "@" for an arithmetic operation. Please see the example above regarding how to add and subtract an integer from a variable.

    Synatx is similar to bash, except you don't need two pairs of parentheses. Please see the example above regarding how to compare $i and $num_args.

    Tcsh syntax is similar to bash. The code below reads a string from the user, checks to see if it's an empty string. If not, it does a pattern match to see if the string ends with ".gif".
    #!/bin/tcsh -f
    
    echo -n "Enter a file name: "
    set name = $<
    if ($name == "") then
        echo "Did you enter an empty string?"
    else
        if ($name =~ "*.gif") then
            echo "GIF file name: $name"
        else
            echo "Not a IF file name: $name"
        endif
    endif

    Tcsh syntax is different from bash. Please see the example above regarding nested if-then-else statements.

    Tcsh syntax is different from bash. Instead of using for, tcsh uses foreach. Please see the example above regarding iterating through a list using foreach.

    Tcsh syntax is slightly different from bash. Please see the example above regarding how to use while to loop as long as a condition is true.

    Tcsh syntax is different from bash. The code below reads a string from the user, checks to see if it equals to one of the cases.
    #!/bin/tcsh -f
    
    echo -n "Enter a number randomly chosen between 1 and 10: "
    set x = $<
    switch ( $x )
    case "1", "3", "5", "7", "9":
        echo "You have entered an odd number between 1 and 10: $x"
        breaksw
    case "2", "4", "6", "8", "10":
        echo "You have entered an even number between 1 and 10: $x"
        breaksw
    default:
        echo "You have entered: $x"
    endsw

    Unlike bash, tcsh does not support functions. In that respect, yes, bash is superior to tcsh!