help source says:
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
source is a synonym for
., that means you can write both
What they do:
source reads every line of the file (line by line) and executes it in the current shell.
./myshellscript executes the file in the current directory if it has the rights to do so. This could also be
(to execute the file
myshellscript which is in the directory
That means, that here the dot is just the current directory. Therefore
./myshellscript executes the file called
myshellscript in the current directory.
For example try
which changes to the current directory (no real change ;-)) or
which lists the content of the current directory.
And as @Alvin Wong commented: You can try this script
echo "This is the Shell that executes me:"
source to see, that it does not read the shebang. It just uses your current shell. Executing the script itself would lead to an error.