Hi, thanks for your replies - I have 100% found the problem now.
In the shell script, I was using the 'tc' command which works when running the script manually. It never occured to me to check for the full path of 'tc'. I've changed all instances of the command to '/sbin/tc' and it works perfectly.
I hope this helps someone in future, I imagine it's quite a common thing to do (unless I'm just and idiot)