Yeah, the first time I saw the if/fi construct I boggled. Even better is case/esac. I remember my prof's explanation of it: that *nix shell scripting was thought up by people on lots of drugs. I don't know for sure how accurate that is, but it seems to fit.
I personally am of the 'if it can be done with Perl it's probably better off done with Perl' camp. That said, nothing would ever get done without shell scripting (I am so not writing any of my rc.* in Perl), but in my experience it is most useful for simpler tasks. A shell script gets bulky and unreadable pretty quickly.