in reply to how to deal with 20 commands

If it is going to be a simple system commmand like ls, cp etc. you might just be able to get away by having the 20 commands in a Hash... Simple commands first argument is a command itself and you can split on space to get that command and check it in your Hash...

I am sure there might be other ways to do it but creating an interactive mini-shell might be tricky...for example how do you handle pipes? How do you handle built in functions that throw a message to the user? Remove file xyz (y/n)?: Are you going to parse wild cards or let the shell deal with it?etc.

If you just want to restrict the commands a user should type you can consider restricting the file perm for the commands that they shouldn't be using. However that does not mean they will have a restrictive shell...

cheers

SK