Instead of sourcing the file, you should run it in a separate shell. The source command will run the script's contents in the current shell.
$ cat script.sh
./ex01 command1 > ex.dat;
./ex01 command1 > ex.dat;
...
$ sh script.sh
...
The semicolons are not necessary.
./ex01 command1 > ex.dat
./ex01 command1 > ex.dat
...
To run the commands in parallel, add an ampersand (&) to the end of each command.
./ex01 command1 > ex.dat &
./ex01 command1 > ex.dat &
...
Note that the above will be problematic because two commands are writing to a single file. You should either write to different files,
./ex01 command1 > ex1.dat &
./ex01 command1 > ex2.dat &
...
or append to the file.
./ex01 command1 >> ex1.dat &
./ex01 command1 >> ex2.dat &
...
If your script repeats the same line over and over again, you can use a loop.
# Run 10 times
for i in $(seq 1 10) ; do
./ex01 command1 >> ex1.dat &
done
Edit: If the argument's number changes linearly, you can use a loop like this:
# Run 10 times
for i in $(seq 1 10) ; do
./ex01 command$i >> ex.dat &
done
sourcecommand has anything to do with parallelism?