As a software developer, there will come a time when you need to execute an external program or programs in order to accomplish a non-trivial task. Being a good developer, you will run and test your commands separately from your program; and being a lazy programmer (laziness being one of the great virtues of a programmer), you will put these commands in a shell script, so that you can quickly iterate and discover potential issues and problems.
Finally, when you are done, you will - again, being a lazy programmer - think, "Hey, I have a shell script that already does this thing. I should just have my program execute the shell script!"
DO. NOT. DO. THIS.
Shell scripts are wonderful.
Shell scripts are awesome.
Shell scripts definitely have their place... but shell scripts can also, very quickly and very easily, become unmaintainable nightmares.
A truly lazy developer will recognize this. Realizing that investing some time now will allow him to be lazy in the future, he will take that shell script and re-write it in something maintainable, like Python. Or Ruby. Or... heck, just about anything else.