When two programss are physicaly the same (using te same place on disk), but having different name to be called with (using links) that does not imply that you get the same results. When a program is called, the kernel makes the arguments of the call available to the program. Argument #0 is the name it is called with. Thus iinside he program you can see if you have to behave like sh or like bash. And look at these:
henk@boven:~> l /bin/ex
lrwxrwxrwx 1 root root 3 jan 2 2010 /bin/ex -> vim*
henk@boven:~> l /bin/vi
lrwxrwxrwx 1 root root 3 jan 2 2010 /bin/vi -> vim*
henk@boven:~>
Different editors, but the same file on disk.
Back to bash and sh.
bash is the name the Borne Again Shell is called with.
sh is the name the POSIX shell is called with.
(and there are more shells: ksh, zsh, csh, …).
While these do have a lot in common, there are differences and it is a nice task to compare both man pages ;).
Also in a next level of openSUSE, or in a different distro, or on another Unix system, bash and sh might be different files. Let not the fact that you know that at this moment in time on the system you use they are links, lure you into thinking this is a law for ever and ever.
I know of at least one thread here where someone thought that putting the shebang* #!/bin/sh* in the first line of his bash script would do no harm. It did, because he had one of those (very deep hidden) differences used in his script.
It is simple. You make a script according to the documentation of that shell and you let it start with the correct shebang (else it is not a script, but juist a bunch of statements).
It is simple. When you want an executable program (being it a shell script, a Python program, a compiled/linked C/Fortran/Cobol program) to be made available for execution, you have to set the appropriate x-bits. Look at konqueror:
henk@boven:~> l /usr/bin/konqueror
-rwxr-xr-x 1 root root 5656 feb 4 22:15 /usr/bin/konqueror*
henk@boven:~>
The x-bits are set thus that the owner root the groupmembers of group root and everybody else can execute it. A script is not different at all.