I've done lots of scripting using sh/bash, perl, and tcl. In many cases, the choice of what language to use was made for me due to either company or group standards or due to integration with an existing tool/library set. I find myself using sh/bash most of the time due to it's ease of porting between unix/linux systems and because it's simply easier to do small tasks. I've written bourne shell scripts that's just a single line and whole tool sets that included 5-10 different scripts. In the end, the choice usually depends on what I need to do. Here's what I feel each has to offer:
Shell scripting (sh/bash)
+ Simple to write small scripts.
+ If written correctly, will run on almost any unix/linux system.
+ Best choice when there are lots of interaction with other commands.
- Not as easy to learn if you already know C for instance.
- sed/awk are very powerful tools but not as easy to use as perl when it comes to text processing.
Perl
+ Moderate to high extensibility. Meaning you can write or install additional libraries to add functionality.
+ Highly efficient for processing files. Only language I know that contains special syntax to open and read all lines in a file into a loop variable.
+ Text processing (RegEx) built-in
+ Best choice if you need to do a lot of text processing. Very powerful regular expression language (extended from what you have in sed)
- More overhead.
- Library dependencies can kill your portability.
- Some systems like busybox based systems just don't have perl.
- A bit top heavy for a script language. Meaning too many special commands.
TCL
+ Highly extensible. Even early versions had namespace and module capabilities.
+ Very efficient language overall. Very few wasted commands/keywords.
+ Built-in associative arrays. In fact, all arrays are associative.
+ Able to develop portable gui using "wish".
+ Tcl has many spin-off languages like "expect".
+ Best choice if you have lots of "logic" in your script. Only choice if you want to write a simple gui interface in a script.
- A bit harder to learn than Perl but arguably more powerful.
- Not as widely used as Perl.
- String manipulation (i.e. RegEx processing) is done through a function call rather than a built-in as in Perl.
If you already know C, start with Perl. That'll be the easiest for you to learn. I'd then suggest you move to bourne shell. Here, I'll make the distinction between "sh" and "bash". If you learn "sh", that will be the most portable but "bash" is pretty much used in all modern unix/linux distros so it should not be a problem.