A short list of possible problems (of course depending on the shell in question):
spaces in filenames
newlines in filenames
nonprintables in filenames
empty variables and their expansion ([ x$foo = "xsomething" ])
errors in pipes
environment madness
/bin/bash ?= /bin/sh
Arrays or the lack of it
Space separates lists as arrays
#!bash vs. #!/bin/bash vs. #!/usr/bin/env bash vs. #!/usr/sfw/bin/bash vs. ...
Unwritable and unreadable control structures (if [], case, &&,...)
Information leaks via ps
and many others...
Never use shell except to search for and invoke a sensible language. And anything is more sensible, including C, Perl, brainfuck and Basic.