[for general scripting advice, see the other answers]
This answer is about use of command-line programs and also large chains of them.
For running chains of CLI programs, and perhaps many chains in sequence, bash is the easiest. Perl can do the same but the language is much harder to learn and is far more complex, and as many have pointed out, it's easy to write unintelligible Perl.
If you are iterating over files and parameters, bash is easiest to get going because you can prototype in the shell, then copy into a script and add some arrays and loops with minimal overhead.
Examples of what I mean:
$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}
In bash, it is easy to wrap that in a few loops over some of those parameters. However, the code becomes hard to read once the script is more than a few tens of lines. ---imagine 30 sets of commands (a few lines each) for thirty different data plots---
Perl and Python could be better for large scripts because they have cleaner syntax for looping and variables, but the bash commands must be generated as strings, run as subprocesses, and stdin,stdout captured. It can be done, but it cannot fully replace the native shell environment.
If shells had a better language this would all be avoided.