Why do I need to put sh before running .sh files? When I want to run .sh files in Terminal, I need to put sh in front of them.

Is there any way to avoid this, and thus save typing?
If you're running your script from the shell, you don't actually need the #!/bin/sh shebang as outlined in this this answer–every Unix-like system I've used, including OS X, will default to /bin/sh if no interpreter is specifically specified (though it's a good idea as non-shells won't know how to execute your script unless you give the shebang.)

You also don't need an .sh extension.  You do need to set executable permissions, e.g.

$ chmod +x script.sh


(The $ is the shell prompt; I'm using it to illustrate commands you give to the interactive shell.  Don't type it!)

However, I think what your confusion is is that you have created a script, e.g. script.sh, in the current directory, and are trying to execute it by simply typing script.sh.  e.g.

$ cat &gt;script.sh
echo hello, world
^D
$ chmod +x script.sh
$ script.sh
-bash: script.sh: command not found


(^D means control-D.  You will find this notation in many writeups on using Unix.)

The fact that script.sh in this case is a shell script is only half the problem; your actual issue is that, by default, the shell will not search the current directory for a program.  However, this works:

$ sh script.sh
hello, world


because sh is taking the script as an argument.

You can execute a script–or, again, any executable–in the current directory, if it is marked executable (i.e. chmod +x), by specifying that you want to run the one in the current directory:

$ ./script.sh
hello, world


You can also move the script to a directory on your PATH.  I recommend /usr/local/bin for this if your script is intended to be used system-wide, or a bin directory in your home if the script is only for you.  The latter requires you to add $HOME/bin, which expands to your new bin directory, to your PATH by adding the following lines to your .profile in your home directory:

PATH=$HOME/bin:$PATH
export PATH


Finally, you can, if you want, actually add the current directory to your PATH, which will allow you to just go to a directory containing script.sh–or any other executable–and type

$ script.sh


to execute it.  However, I do not recommend this practice, as an attacker can now trick you into running an arbitrary executable by dropping an executable script (named, say, ls) into a directory you will be in.  If you really want to do it, though, just add the following to your .profile:

PATH=.:$PATH
export PATH