Testing a shell command interpretor
Instead of multiple echo statements, consider using a here document:

cat &lt;&lt;EOF
-- Testing our implementation of OpenShell --

- If you have any problem in passing a test read the corresponding
- source file to understand what the test is checking
EOF


To echo an empty line, you can write echo without parameters instead of echo.

The flags of echo are not portable. Instead of echo -n, you can use printf.

If you don't need the user input, you don't need a parameter for read.

Parsing the output of ls -l is considered a bad practice.

Instead of this:

./shell &lt; &lt;(echo "...")


You can use a here string:

./shell &lt;&lt;&lt; "..."


Some vertical space (blank lines) can improve the readability of your code.

Putting it all together, your script would be better this way:

#!/bin/bash
cat &lt;&lt; EOF
-- Testing our implementation of OpenShell --

- If you have any problem in passing a test read the corresponding
- source file to understand what the test is checking

EOF
printf "********************* PRESS ENTER TO RUN TESTS  ... "
read

echo ls -al openshell.* | ./shell
printf "********************* TEST ALGORITHMS ... "
read

./shell &lt;&lt;&lt; "ls -al|grep open|awk '{print \$9}'"
printf "********************* TEST DONE. YOU SHOULD SEE FILENAMES ABOVE ... "


Update

As per your follow-up question, and as @Mat pointed out, neither &lt;(cmd) nor here-strings will work in dash. To make the last statement work, you could use a here document:

./shell &lt;&lt; EOF
ls -al|grep open|awk '{print \$9}'
EOF