O problema com seu script é que a linha su $USER
invoca uma subshell e, portanto, o próximo comando não é executado até que a sub-camada seja encerrada.
Você provavelmente quer fazer algo mais como:
USER=sameek
USERCMDS=/tmp/usercommands.$$
echo "JAVA_HOME=..." >>$USERCMDS
echo "PATH=${JAVA_HOME}:$PATH" >> $USERCMDS
echo "javac HelloWorld.java" >> $USERCMDS
chmod a+x $USERCMDS
su $USER -c $USERCMDS