For me, the most powerful reason is pipes. For a lot of things I do, it's much easier to think in terms of pipes than pretty much anything else. This allows me to compose a solution where the parts of the solution need not be in shell at all (and are often just normal Unix tools).
My preferred language for anything serious is perl, but I wouldn't convert a pipe-based conceptual data flow to perl, or indeed any language. They're very strong when all the data manipulation is done *inside* the program, but don't offer much when you want to combine different, existing, programs to get the job done.